Est la plus récente version de MS Enterprise Library compatible avec les anciennes versions comme 3.1

StackOverflow https://stackoverflow.com/questions/1929994

Question

Ce projet en cours que j'ai assigné utilise la version 3.1 de niveaux:

Microsoft.Practices.EnterpriseLibrary.Common;
Microsoft.Practices.EnterpriseLibrary.Data;

Comme j'essaie d'apprendre à connaître davantage sur les capacités de l'Ent Lib, je courais dans beaucoup d'articles et doc sur les différentes versions (3.1, 4.0 et 5.0, je pense).

En général les nouvelles versions ne fonctionnent avec le code d'application écrit pour une version antérieure de l'Ent Lib? Je ne l'ai pas étudié tout le code source dans cette application que j'ai hérité, mais je pense que les « bases » de l'accès aux données bloc d'application sont utilisés. Voici un morceau typique de code:

        public override List<Erx.Action> GetAll(bool bIsActive)
    {
        Database db = null;
        DbCommand cmd = null;
        List<Erx.Action> lst = null;
        IDataReader iRdr = null;
        try
        {
            db = DatabaseFactory.CreateDatabase();
            cmd = db.GetStoredProcCommand("Mst_GetAllCorrectiveAction");
            db.AddInParameter(cmd, "@CorrectiveActionID", DbType.Int32, -1);
            db.AddInParameter(cmd, "@IsActive", DbType.Boolean, bIsActive);
            iRdr = db.ExecuteReader(cmd);

            lst = new List<Erx.Action>();

            while (iRdr.Read())
            {
                Action objAction = new Action();
                objAction.CorrectiveAction = iRdr["CorrectiveAction"].ToString();
                objAction.CorrectiveActionID = int.Parse(iRdr["CorrectiveActionID"].ToString());
                objAction.IsActive = (bool)iRdr["IsActive"];
                lst.Add(objAction);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            db = null;
            iRdr.Close();
            if (cmd != null)
            {
                cmd.Dispose(); cmd = null;
            }
        }
        return lst;
    }

Franchement, cela ne semble pas offrir beaucoup au-delà ADO.Net régulière mais peut-être les versions les plus récentes font des choses plus simples (je l'ai entendu de très bonnes choses à propos de l'unité).

Était-ce utile?

La solution

Je viens d'installer Ent Lib 4.1 et creusa étroitement dans le doc et trouvé cela dans la « Introduction au bloc d'accès aux données d'application »:

Fonctionnalités modifiées, version 3.1 et versions ultérieures

En général, les applications construites avec les versions antérieures de l'accès aux données Application Block fonctionnera avec cette version sans avoir recours à aucune modification de code. Il peut être nécessaire de mettre à jour les références de se référer aux nouvelles assemblées et mettre à jour les fichiers de configuration pour référencer la version correcte des assemblages. Cependant, quelques modifications ont été apportées à l'accès aux données Application Block dans la version 3.1 (mai 2007), ce qui peut affecter les applications écrites pour des versions antérieures si vous mettez à niveau vers la version actuelle de Enterprise Library. Les sections suivantes décrivent ces modifications.

Le .NET Framework 2.0 classe TransactionScope Pour tirer profit du .NET Framework 2.0 classe TransactionScope, il y a eu des changements à certaines des méthodes de classe de base de données dans la version de Enterprise Library à partir de la version 3.1 partir. Ces méthodes, telles que ExecuteNonQuery, ont été modifiées pour reconnaître le moment où une instance TransactionScope est actif en remplaçant la méthode GetConnection avec la méthode de GetOpenConnection. Si vous avez écrit une classe qui hérite de la classe de base de données, vous devrez réécrire votre code pour prendre en compte ces changements. Si vous continuez à utiliser la méthode GetConnection, vous recevrez un avertissement du compilateur. De plus, si votre application utilise la méthode ExecuteXmlReader, vous devrez peut-être réécrire votre code pour tester pour voir si une instance TransactionScope est active avant de fermer une connexion. Pour plus d'informations, consultez Utilisation de la classe TransactionScope. Pour un exemple de la façon d'utiliser la méthode ExecuteXmlReader, voir Rows multiples au format XML. texte fort SQL Server Compact Edition Enterprise Library 3.1 - mai 2007 et prend en charge plus tard SQL Server Compact Edition (CE). SQL Server CE fournit les caractéristiques essentielles d'une base de données relationnelle et est destiné aux applications de bureau et mobiles qui ont besoin d'une banque de données locale, mais ne nécessitent pas toutes les fonctionnalités de SQL Server. Pour plus d'informations, consultez la section "Utilisation CE SQL Server" dans la création d'un objet de base de données.

Je suis encore en train d'avoir une idée de la façon dont ce DAAB vraiment utile est. Il semble comme une énorme quantité de lecture de doc est nécessaire pour finir par écrire juste un peu moins de code que le contraire nécessaire avec ADO.NET non aidé par le DAAB. Je suppose que si l'on voulait fournir pour un commutateur plus facile à dire, Oracle [à partir de MS SQL Server), c'est un moyen utile pour configurer les choses.

Autres conseils

Si vous avez des tests unitaires, le port à nouveau et d'exécuter et de voir, si vous avez ReSharper il peut analyser votre solution dans VStudio et indiquer le errors.It prendra du temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top