1. Entity Framework Core 简史

    技术2025-05-22  54

    Entity Framework 和Entity Framework Core(EF Core)是一个提供了实体-关系映射的架构,通过它们,可以创建映射到数据库表的类型,使用LINQ创建数据库查询,创建和更新对象,把它们写入数据库。

    Entity Framework 经过多年的改变,EF Core完全重写了。下面看看Entity Framework的历史,了解改写的原因。

    Entity Framework 1——Entity Framework 的第一个版本没有准备用于.NET 3.5,但不久它就可用于.NET 3.5 SPI。另一个产品是LINQ to SQL,它提供了类似的功能,可用于.NET 3.5。从广义上看,LINQ to SQL和Entity Framework提供了类似的功能。然而,LINQ to SQL使用起来更简单,但只用于访问SQL Server。Entity Framework是基于提供程序的,可以访问几种不同的关系数据库。它包含了更多的功能,比如多对多映射,不需要映射对象,可以进行n到n映射。Entity Framework的一个缺点是,它要求模型类型派生自EntityObject基类。使用一个包含XML的EDMX文件,把对象映射到关系上。所包含的XML用三种模式定义:概念模式定义(Conceptual Schema Definition,CSD)定义对象类型及其属性和关联;存储模式定义(Storage Schema Definition,SSD)定义了数据库表、列和关系;映射模式语言(Mapping Schema Language,MSL)定义了CSD和SSD如何彼此映射。Entity Framewokr 4——Entity Framework 4可用于.NET 4,进行了重大改进,许多想法都来自LINQ to SQL。因为改动较大,跳过了版本2和3。在这个版本中,增加了延迟加载,在访问属性时获取关系。设计模型后,可以使用SQL数据定义语言(DDL)创建数据库。使用Entity Framework的两个模型现在是Database First或Model First。添加的最重要特性是支持Plain Old ClR Object(POCO),所以不再需要派生自基类EntityObject。

    在后台的更新(如Entity Framework 4.1、4.2)中,用NuGet包添加了额外的特性。这允许更快地增加功能。Entity Framework 4.1提供了Code First模型,其中不再使用定义映射的EDMX文件。相反,所有的映射都使用C#代码定义——使用特性或流利API定义使用代码的映射。

    Entity Framework 4.3添加了对迁移的支持。有了迁移,可以使用C#代码定义对数据库中模式的更新。数据库更新可以自动应用到使用数据库的应用程序上。

    Entity Framework 5——Entity Framework 5的NuGet包支持.NET Framework 4.5和.NET Framework 4.0应用程序。然而,Entity Framework 5的许多功能可用于.NET Framework 4.5。Entity Framework仍然基于安装在系统上的类型和.NET Framework 4.5。在这个版本中,新增了性能改进,支持新的SQL Server功能。如空间数据类型。而且,当使用.NET Framework 4.0时,这些特性中有很多都是无法使用的。Entity Framework 6——Entity Framewokr 6解决了Entity Framework 5的一些问题,其部分原因是,该框架的一部分安装在系统上,一部分通过NuGet扩展获得。现在,Entity Framework的完整代码都移动到NuGet包上。为了不出现冲突,使用了一个新的名称空间。将应用程序移植到新版本上,必须改变名称空间。Entity Framework Core(EF Core)——Entity Framework的这个版本有了新的名称,是对Entity Framework的完全重写。EF Core不仅可以在Windows上使用,也可以在Linux和Mac上使用。它支持关系数据库和NoSQL数据存储。

    本书介绍Entity Framework Core 2.0。这个版本不支持XML文件映射与CSDL、SSDL和MSL。只支持Code First——用Entity Framewokr 4.1添加的模型。Code First并不意味着数据库不存在。可以先创建数据库,或纯粹从代码中定义数据库;这两种选择都是可能的。

    注意:

    名称Code First有些误导。在Code First中,代码或者数据库都可以先创建。在最初Code First的beta版本中,名字是Code Only,因为其他模型选项在名字中包含First,所以名称Code Only也改变了。

    Entity Framewokr Core 1.0不支持Entity Framewokr 6提供的所有特性。Entity Framework Core 2.0有所改进,但仍然不支持Entity Framework 6的所有特性。然而,它也有一些Entity Framework 6没有的新特性。

    只需要注意使用什么版本的Entity Framework。始终使用Entity Framework 6有许多有效的理由,但在非Windows平台上使用ASP.NET Core,使用Entity Framework与通用Windows平台,使用Xamarin,使用非关系数据存储,都需要使用EF Core。

    本章介绍EF Core。它始于一个简单的模型读写来自SQL Server的信息。后来,添加了关系,在写入数据库时介绍变更追踪器和冲突的处理。使用迁移创建和修改数据库模式是本章的另一个重要组成部分。

    Processed: 0.012, SQL: 9