最新版本的MS Enterprise Library是否与3.1等旧版本兼容

时间:2009-12-18 18:44:08

标签: enterprise-library backwards-compatibility

我分配的当前项目使用版本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的非常好的东西)。

2 个答案:

答案 0 :(得分:1)

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

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

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

.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],这是配置事物的有用方法。

答案 1 :(得分:0)

如果您有单元测试,请移植到新的并运行并查看,如果您有Resharper,它可以在VStudio中分析您的解决方案并指出错误。它会花费您的时间。