Entity Framework 首次发布的时候是作为.NET Framework 核心库的一部分。但微软随即意识到 EF 并不是一个完整的产品,需要用一些“带外的(out-of-band)”发布来进行增强。这使其被划分为两大类别:System.Data.Entity.dll 中的核心类和 EntityFramework.dll 中的带外类。
从那以后,微软决定将 Entity Framework 整个迁移到开源模型。这需要进一步改造,而且其核心文件也不可能简单地从.NET 4.0 中移除。为了解决这一问题,微软使用了命名空间切换。“命名空间切换的一般规则是,将 System.Data.* 下的类型迁移到 System.Data.Entity.Core.*”。
一些例外情况包括:
- System.Data.EntityState => System.Data.Entity.EntityState
- System.Data.Objects.DataClasses.EdmFunctionAttribute => System.Data.Entity.DbFunctionAttribute(注意类的名称也发生了变化,旧类依然存在并且可以工作,但被标注为废弃的。)
- System.Data.Objects.EntityFunctions => System.Data.Entity.DbFunctions(注意类的名称也发生了变化,旧类依然存在并且可以工作,但被标注为废弃的。)
- 一些特殊的类(如 DbGeography、DbGeometry)从 System.Data.Spatial 迁移到了 System.Data.Entity.Spatial。
项目成员 ajcvickers 解释道,位于 System.Data.dll 程序集内 System.Data 命名空间中的 EF 相关类不会发生改变。
在更新项目的 using 语句之前,需要移除对 System.Data.Entity.dll 的引用。否则将混合使用 Entity Framework 的新旧版本。
还要注意的是,Entity Framework 5 的第三方提供程序与 EF 6 不兼容。因此如果使用的不是 SQL Server 或 SQL Server Compact Edition,则需要更新提供程序。这些改动很小,只是一些基本的东西,如覆盖 IsGeographyColumn 和 GetGeographyAsync。
评论