Entity Framework Core 3.0 和 Entity Framework 6.3 正式发布
Entity Framework Core 3.0 和 Entity Framework 6.3 通用版发布了,接下来我们看看它的新内容:
Entity Framework Core 3.0
EF Core 3.0 包括主要特性、小部分增强和错误修复,以下是一些重要内容:
LINQ overhaul
重构了 LINQ Provider,以便能够将更多的查询模式转换为 SQL,在更多情况下生成高效的查询,并防止低效率的查询无法被检测到。新的 LINQ Provider 是能在未来版本中提供新的查询功能和性能改进的基础,而不会破坏现有的应用程序和数据提供程序。
Cosmos DB 支持
EF Core 的 Cosmos DB Provider 让熟悉 EF 编程模型的开发人员能够轻松地将 Azure Cosmos DB 作为应用程序数据库。其目标是使 Cosmos DB 的一些优点,如全球分布(Global distribution)、“always on”可用性、弹性可伸缩性和低延迟,被 .NET 开发人员更容易访问。Cosmos DB Provider 针对 Cosmos DB 中的 SQL API 启用了大多数 EF Core 功能,如自动更改跟踪、LINQ 和值转换。
C# 8.0 支持
EF Core 3.0 利用了 C# 8.0 中的一些新特性:
- 异步流:异步查询结果现在使用新标准 IAsyncEnDigable<T> 接口公开,并且可以使用 await foreach
- 可空引用类型:在代码中启用此新功能时,EF Core 检查引用类型属性的空值性,并将其应用于数据库中相应的列和关系
拦截数据库操作
EF Core 3.0 中的包含新的 API,用于拦截数据库操作。这与 EF 6 中存在的截取功能非常相似,它允许编写简单的逻辑,只要打开数据库连接、提交事务或执行查询,EFCore 就会自动调用该逻辑。拦截器通常允许在操作发生之前或之后拦截它们。当在它们发生之前拦截它们时,可以旁路执行并提供截取逻辑的备用结果。
例如,要操作命令文本,可以创建一个 IDbCommandInterceptor:
public class HintCommandInterceptor : DbCommandInterceptor { public override InterceptionResult ReaderExecuting( DbCommand command, CommandEventData eventData, InterceptionResult result) { // Manipulate the command text, etc. here... command.CommandText += " OPTION (OPTIMIZE FOR UNKNOWN)"; return result; } }
并将其注册到你的 DbContext 中:
services.AddDbContext(b => b .UseSqlServer(connectionString) .AddInterceptors(new HintCommandInterceptor()));
数据库视图的逆向工程
Query Types(表示可以从数据库读取但未更新的数据),现在重命名为 keyless entity types。由于 EF Core 非常适合在大多数场景中映射数据库视图,所以现可在反向工程数据库视图时自动创建 keyless entity types。
例如,使用 DotNet EF 命令行工具(dotnet ef command-line tool),键入:
dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer
该工具将自动为没有键的视图和表,提供 scaffold types:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Names>(entity => { entity.HasNoKey(); entity.ToView("Names"); }); modelBuilder.Entity<Things>(entity => { entity.HasNoKey(); }); }
与主体共享表的依赖实体是可选的
从 EF Core 3.0 开始,如果 OrderDetails 属于 Order 或显式映射到同一个表,则可以在没有 OrderDetails 和所有 OrderDetails 属性的情况下添加 Order,但主键将映射到可空列。
当查询时,如果它必要属性不存在值,或者它除了主键之外没有必要属性,EF Core 会将 OrderDetails 设置为 null。
public class Order { public int Id { get; set; } public int CustomerId { get; set; } public OrderDetails Details { get; set; } } [Owned] public class OrderDetails { public int Id { get; set; } public string ShippingAddress { get; set; } }
Entity Framework 6.3
最新版本的 EF 6 移植到 .NET Core 3.0 上,以下是一些最显著的改进:
- 支持 .NET Core 3.0
- 除了 .NET Framework 4.0 和 4.5 之外,EF 6.3 runtime 包现支持 .NET Standard 2.1
- 迁移命令已被重写,以执行进程外和使用 SDK 样式的项目
- 对 SQL Server 层次结构的支持
- 改进与 Roslyn 和 NuGet PackageReference 的兼容性
- 添加了 ef6.exe 实用程序,取代了 portate.exe,用于启用、添加、编写脚本和应用来自程序集的迁移
在 .NET Core 中使用 EF 6.3 有一定的限制。例如:
- 数据提供程序也需要移植到 .NET Core。然而只移植了包含在 EF 6.3 包中的 SQL Server 提供程序
- spatial 支持不会在 SQL Server 中启用,因为 spatial 类型无法使用 .NET Core
- 目前不支持在 .NET Core 或 .NET Standard 项目上直接使用 EF designer
详情见发布说明:
https://devblogs.microsoft.com/dotnet/announcing-ef-core-3-0-and-ef-6-3-general-availability/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ASP.NET Core 3.0 发布
随着.NET Core 3.0 的 GA,其中的 ASP.NET Core 与Blazor 也相应得到增强,此版本的 ASP.NET Core 的一些重大新特性包括: 使用 C# 构建富交互客户端 Web 应用。 使用 gRPC 创建高性能后端服务。 SignalR 现在支持自动重连接和客户端到服务器(client-to-server)流。 使用 OpenAPI 文档为 Web API 生成强类型的客户端代码。 通过框架集成了端点路由。 Kestrel 默认启用 HTTP/2。 集成 Web API 和单页应用身份验证支持。 支持证书和 Kerberos 身份验证。 集成新的 System.Text.Json 序列化器。 新的通用主机设置了常见的托管服务,例如依赖项注入、配置和日志。 用于构建长期服务的新 Worker Service 模板。 为每秒请求、总请求、当前请求和失败请求创建了新的 EventCounters。 现在会将托管在 IIS 中的启动错误报告给 Windows Event Log。 请求管道集成 System.IO.Pipelines。 整个技术栈的性能改进。 详情...
- 下一篇
Visual Studio 2019 16.3 正式发布,支持 .NET Core 3.0
微软正式发布了 Visual Studio 2019 16.3 版本,主要更新内容如下: .NET Core 3.0 Visual Studio 版本 16.3 包括对.NET Core 3.0的支持。 注意:如果使用的是 .NET Core 3.0,则需要使用 Visual Studio 16.3 或更高版本。 .NET Core 桌面应用程序支持 .NET Core 3.0 完全支持 Windows 窗体和 WPF 应用程序。 Visual Studio 2019 16.3 具有用于构建和发布 WPF 应用程序所需的熟悉工具,包括 WPF XAML 设计器、用于为 WPF 应用程序创建 MSIX 包的工具等。 此外,面向 .NET Core 项目的 Windows Forms Designer 的第一个预览版现已发布。目前还处于设计起步阶段,因此可以作为 Visual Studio 扩展(“ VSIX”)使用。一旦安装了 .NET Core Designer,Visual Studio 将根据你的应用程序的目标框架自动选择合适的设计器。设计器的预览版只支持一部分控件,但是在进一步的...
相关文章
文章评论
共有0条评论来说两句吧...