Entity Framework Core 2.0的突破性变更
在之前的文章里,我们看到了EF Core 2.0的新特性和槽点。今天,我们来看一看EF Core的突破性变更。
\\
不支持EF Core 1.x数据库驱动器
\\
EF通过数据库驱动器为SQL Server、MySQL等数据库生成SQL。EF没有通用的OleDB或ODBC驱动器,所以只能使用专门为它创建的数据库驱动器。
\\
为了简化数据库驱动器的开发,EF Core更改了驱动器API,不再提供向后兼容的能力。这意味着EF Core 1.0和1.1的驱动器不再受EF Core 2.0的支持,如果要继续使用它们,必须基于EF Core 2.0的API对它们进行重写。
\\
根据微软所述,“SQL Compact、PostgreSQL和MySQL的第三方开源数据库驱动器正在升级到2.0”。如果使用了其他数据库,需要自行联系驱动器开发者。
\\
IDbContextFactory被重命名为IDesignTimeDBContextFactory
\\
IDbContextFactory类不应该被作为DbContext工厂类来使用,虽然它的名字看起来有这个意味。实际上,这个类本应被用在设计工具里,设计工具在生成数据库迁移脚本时需要用到DbContext对象。
\\
为了避免混淆,IDbContextFactory被标记为“过时”的,设计工具可以改为调用IDesignTimeDBContextFactory。
\\
与此相关的另一个变更是停止对DbContextFactoryOptions的支持,这个类不适用于设计时上下文的生成。
\\
日志和诊断事件的变更
\\
EF Core的日志和诊断事件变更包括:
\\
- 发送给ILogger的消息事件ID发生了变化。事件ID在整个EF Core里是唯一的,而且消息遵循了MVC所使用的结构化日志标准模式。 \\
- 日志类别也发生了变化。现在可以通过DbLoggerCategory访问到各种日志类别。 \\
- DiagnosticSource使用了与相应ILogger消息相同的事件ID。事件内容均为派生自EventData的标准类型。\
虽说上面列出的都算得上是突破性的变更,但微软希望它们不会对现有的应用程序造成太大的影响。
\\
内存数据库必须指定名字
\\
在进行性能测试时,创建内存数据库是非常重要的一个辅助手段。虽然这并不能反映应用程序在生产环境的真实行为,但在诊断业务逻辑时还是很有用的。
\\
EF Core之前可以支持一个全局的匿名内存数据库,但现在要求开发人员必须为创建的每一个内存数据库命名。不过,同一个内存数据库仍然可以被多个上下文实例所共享。
\\
只读API的变更
\\
EF Core停止支持由IProperty接口暴露出来的IsReadOnlyBeforeSave、IsReadOnlyAfterSave和IsStoreGeneratedAlways。它们被IProperty的BeforeSaveBehavior和AfterSaveBehavior所取代。文档里写道:
\\
\
被标记为ValueGenerated.OnAddOrUpdate的属性默认会忽略当前设定的值。也就是说,不管被追踪实体的属性是否发生了变化,比如被设定初始值或者被修改为其他值,它们都只使用store-generated的值。要想让改变生效,可以通过设置BeforeSaveBehavior或AfterSaveBehavior来实现。
\
\\
因为添加了新的字段,所以对于IProperty来说,这也算是一个突破性的变更。
\\
ClientSetNull成为默认的删除行为
\\
之前,EF Core有三种可能的级联删除行为:
\\
- Cascade:依赖的实体也一并被删除。这种级联行为只对被上下文跟踪到的实体有效。数据库里也需要设置相应的级联,确保没有被上下文跟踪到的数据也具备同样的行为。如果你通过EF来创建数据库,那么EF会为你设置好数据库的级联。 \\
- Restrict:删除操作不会作用在依赖实体上,依赖实体保持不变。 \\
- SetNull:依赖实体的外键被设为null。这种级联行为只对被上下文跟踪到的实体有效。数据库里也需要设置相应的级联,确保没有被上下文跟踪到的数据也具备同样的行为。如果你通过EF来创建数据库,那么EF会为你设置好数据库的级联。\
EF Core 2.0新增了一种默认行为,叫作ClientSetNull。
\\
\
EF Core 2.0引入了一种叫作ClientSetNull的默认行为。它具有SetNull的语义,兼有Restrict的行为。从我们的经验来看,对于被跟踪的实体和数据库来说,它是最被期待也是最有用的一种行为。
\\
在为被跟踪的实体设置级联关系时,DeleteBehavior.Restrict已经成为历史。
\
\\
设计时工具包的合并
\\
Microsoft.EntityFrameworkCore.Relational.Design包被弃用,原先的内容被合并到Microsoft.EntityFrameworkCore.Relational和Microsoft.EntityFrameworkCore.Design当中。这样做的好处是现在可以少引入一个包。
\\
在后续的文章中,我们将会看到EF Core的路线图。
\\
查看英文原文: Breaking Changes in EF Core 2.0
Entity Framework Core 2.0的突破性变更相关推荐
- Entity Framework Core 2.0的新特性
虽然EF Core 2.0存在大量槽点,但是它也给出了不少亮点.在本文中,我们将介绍这次发布版的部分亮点. \\ 数据库表切分(Table Splitting) \\ ORM常被吐槽是总是对所请求数据 ...
- Entity Framework Core 2.0 特性介绍和使用指南
前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...
- Entity Framework Core 6.0 预览4 性能改进
起因 微软在Build2021开发者大会上,发布Entity Framework Core 6.0(简称EFCore 6)预览第四版,号称是性能版本,性能提升主要对于Entity Framework ...
- Entity Framework Core 2.0 使用代码进行自动迁移
一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...
- Entity Framework Core 2.0 全局查询过滤器
本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...
- Entity Framework Core 3.0 和 Entity Framework 6.3 正式发布
Entity Framework Core 3.0 和 Entity Framework 6.3 通用版发布了,接下来我们看看它的新内容: Entity Framework Core 3.0 EF C ...
- [转帖]2016年时的新闻:ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0
ASP.NET Core 1.0.ASP.NET MVC Core 1.0和Entity Framework Core 1.0 http://www.cnblogs.com/webapi/p/5673 ...
- Entity Framework Core 7.0 未来规划
Entity Framework Core 7.0(也称为 EF Core 7 或 EF7)的未来规划.该计划汇集了许多相关意见,并概述了微软打算在何处以及如何投资 EF7. IMPORTANT 此 ...
- Entity Framework Core 2.0 使用入门
本文转载自作者:晓晨Master(李志强) 原文章地址 https://www.cnblogs.com/stulzq/p/7717873.html 一.前言 Entity Framework(后面简称 ...
最新文章
- 发布ccnet的步骤
- 【PowerBi】Power Query 对数据进行合并查询
- Auto-Configuration Error: Cannot find gcc or CC
- 无约束优化问题的相关讨论
- 系统工程利用python求解可达矩阵
- 5W1h分析法分析---play框架
- 计算机网络教室验收标准,计算机网络教室建设和配备要求
- SVN目录对号图标(更新、冲突)不显示
- Java 简单的摇骰子游戏:案例
- 北京大学MOOC 程序设计与算法(三)C++面向对象程序设计 期末考试
- esmtp 源码 分析
- IE、FireFox都支持的收藏本站代码
- ARM基本接口之LCD实验
- 格与布尔代数(笔记)
- Azure认证 Administrator Associate(AZ-104) 考试指南,资料分享
- 兰伯特(Lambert)光照模型总结
- day6邮件自动发送
- 新手福利——理解java多态的概念和作用
- Oracle TRIM函数
- android WebView详解,常见漏洞详解和安全源码