在之前的文章里,我们看到了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的突破性变更相关推荐

  1. Entity Framework Core 2.0的新特性

    虽然EF Core 2.0存在大量槽点,但是它也给出了不少亮点.在本文中,我们将介绍这次发布版的部分亮点. \\ 数据库表切分(Table Splitting) \\ ORM常被吐槽是总是对所请求数据 ...

  2. Entity Framework Core 2.0 特性介绍和使用指南

    前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...

  3. Entity Framework Core 6.0 预览4 性能改进

    起因 微软在Build2021开发者大会上,发布Entity Framework Core 6.0(简称EFCore 6)预览第四版,号称是性能版本,性能提升主要对于Entity Framework  ...

  4. Entity Framework Core 2.0 使用代码进行自动迁移

    一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...

  5. Entity Framework Core 2.0 全局查询过滤器

    本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...

  6. 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 ...

  7. [转帖]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 ...

  8. Entity Framework Core 7.0 未来规划

    Entity Framework Core 7.0(也称为 EF Core 7 或 EF7)的未来规划.该计划汇集了许多相关意见,并概述了微软打算在何处以及如何投资  EF7. IMPORTANT 此 ...

  9. Entity Framework Core 2.0 使用入门

    本文转载自作者:晓晨Master(李志强) 原文章地址 https://www.cnblogs.com/stulzq/p/7717873.html 一.前言 Entity Framework(后面简称 ...

最新文章

  1. 发布ccnet的步骤
  2. 【PowerBi】Power Query 对数据进行合并查询
  3. Auto-Configuration Error: Cannot find gcc or CC
  4. 无约束优化问题的相关讨论
  5. 系统工程利用python求解可达矩阵
  6. 5W1h分析法分析---play框架
  7. 计算机网络教室验收标准,计算机网络教室建设和配备要求
  8. SVN目录对号图标(更新、冲突)不显示
  9. Java 简单的摇骰子游戏:案例
  10. 北京大学MOOC 程序设计与算法(三)C++面向对象程序设计 期末考试
  11. esmtp 源码 分析
  12. IE、FireFox都支持的收藏本站代码
  13. ARM基本接口之LCD实验
  14. 格与布尔代数(笔记)
  15. Azure认证 Administrator Associate(AZ-104) 考试指南,资料分享
  16. 兰伯特(Lambert)光照模型总结
  17. day6邮件自动发送
  18. 新手福利——理解java多态的概念和作用
  19. Oracle TRIM函数
  20. android WebView详解,常见漏洞详解和安全源码

热门文章

  1. javascript写坦克大战
  2. php函数scandir_使用PHP函数scandir排除特定目录
  3. python使用阿里云sdk
  4. 科学家正让AI自己做实验,想要机器摆脱人类的直觉
  5. 机器学习入门:线性回归及梯度下降
  6. 关于const 修饰的一些知识
  7. OJ题目-使用+-|等符号表示数字,进行运算【C语言】
  8. Blog博客系统数据库设计
  9. 找出重复的那个数字的异或算法
  10. memcached完全剖析–1. memcached的基础