【问题标题】:Is newest version of MS Enterprise Library compatible with older versions like 3.1最新版本的 MS 企业库是否与 3.1 等旧版本兼容
【发布时间】:2009-12-18 18:44:07
【问题描述】:

分配给我的当前项目使用的是 3.1 版本:

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

当我尝试更多地了解 Ent Lib 的功能时,我遇到了很多关于各种版本(我认为是 3.1、4.0 和 5.0)的文章和文档。

一般来说,较新的版本是否适用于为早期版本的 Ent Lib 编写的应用程序代码?我没有调查我继承的这个应用程序中的所有源代码,但我认为只有数据访问应用程序块的“基础”被使用。这是一段典型的代码:

        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;
    }

坦率地说,这似乎并没有提供超出常规 ADO.Net 的功能,但也许较新的版本使事情变得更简单(我听说过一些关于 Unity 的非常好的东西)。

【问题讨论】:

    标签: enterprise-library backwards-compatibility


    【解决方案1】:

    我刚刚安装了 Ent Lib 4.1 并仔细研究了文档,并在“数据访问应用程序块简介”中找到了这个:

    更改的功能,版本 3.1 及更高版本

    一般来说,使用数据访问应用程序块的早期版本构建的应用程序将在此版本中运行,而无需任何代码更改。可能需要更新引用以引用新程序集,并更新配置文件以引用正确版本的程序集。但是,在版本 3.1(2007 年 5 月)中对数据访问应用程序块进行了一些更改,如果您升级到当前版本的企业库,这可能会影响为早期版本编写的应用程序。以下部分描述了这些变化。

    .NET Framework 2.0 TransactionScope 类 为了利用 .NET Framework 2.0 TransactionScope 类,从 3.1 版开始,Enterprise Library 版本中的一些 Database 类方法发生了变化。这些方法(例如 ExecuteNonQuery)已修改为通过将 GetConnection 方法替换为 GetOpenConnection 方法来识别 TransactionScope 实例何时处于活动状态。如果您编写了一个继承自 Database 类的类,则需要重写代码以将这些更改考虑在内。如果您继续使用 GetConnection 方法,您将收到编译器警告。此外,如果您的应用程序使用 ExecuteXmlReader 方法,您可能需要重写代码以测试在关闭连接之前查看 TransactionScope 实例是否处于活动状态。 有关更多信息,请参阅使用 TransactionScope 类。有关如何使用 ExecuteXMLReader 方法的示例,请参阅以 XML 形式检索多行。 强文本 SQL Server 精简版 Enterprise Library 3.1 – 2007 年 5 月及更高版本支持 SQL Server Compact Edition (CE)。 SQL Server CE 提供关系数据库的基本功能,适用于需要本地数据存储但不需要 SQL Server 全部功能的桌面和移动应用程序。有关详细信息,请参阅创建数据库对象中的“使用 SQL Server CE”部分。

    我仍在尝试了解这个 DAAB 的真正有用性。似乎需要大量阅读文档才能最终编写的代码比在没有 DAAB 帮助的情况下使用 ADO.NET 所需的代码少一点。我想如果有人想提供更简单地说,Oracle [来自 MS SQL Server],这是一种配置事物的有用方法。

    【讨论】:

      【解决方案2】:

      如果你有单元测试,移植到新的并运行看看,如果你有 Resharper,它可以在 VStudio 中分析你的解决方案并指出错误。这需要你时间。

      【讨论】:

        猜你喜欢
        • 2016-04-13
        • 1970-01-01
        • 2015-01-10
        • 2012-09-21
        • 1970-01-01
        • 2021-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多