Entity Framework Core 20的突破性变更

  在之前的文章里,我们看到了EF Core 2.0的新特性槽点。今天,我们来看一看EF Core的突破性变更。

  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 CompactPostgreSQLMySQL的第三方开源数据库驱动器正在升级到2.0”。如果使用了其他数据库,需要自行联系驱动器开发者。

  IDbContextFactory类不应该被作为DbContext工厂类来使用,虽然它的名字看起来有这个意味。实际上,这个类本应被用在设计工具里,设计工具在生成数据库迁移脚本时需要用到DbContext对象。

  与此相关的另一个变更是停止对DbContextFactoryOptions的支持,这个类不适用于设计时上下文的生成。

  发送给ILogger的消息事件ID发生了变化。事件ID在整个EF Core里是唯一的,而且消息遵循了MVC所使用的结构化日志标准模式。

  日志类别也发生了变化。现在可以通过DbLoggerCategory访问到各种日志类别。

  DiagnosticSource使用了与相应ILogger消息相同的事件ID。事件内容均为派生自EventData的标准类型。

  虽说上面列出的都算得上是突破性的变更,但微软希望它们不会对现有的应用程序造成太大的影响。

  在进行性能测试时,创建内存数据库是非常重要的一个辅助手段。虽然这并不能反映应用程序在生产环境的真实行为,但在诊断业务逻辑时还是很有用的。

  EF Core之前可以支持一个全局的匿名内存数据库,但现在要求开发人员必须为创建的每一个内存数据库命名。不过,同一个内存数据库仍然可以被多个上下文实例所共享。

  被标记为ValueGenerated.OnAddOrUpdate的属性默认会忽略当前设定的值。也就是说,不管被追踪实体的属性是否发生了变化,比如被设定初始值或者被修改为其他值,它们都只使用store-generated的值。要想让改变生效,可以通过设置BeforeSaveBehavior或AfterSaveBehavior来实现。

  因为添加了新的字段,所以对于IProperty来说,这也算是一个突破性的变更。

  Cascade:依赖的实体也一并被删除。这种级联行为只对被上下文跟踪到的实体有效。数据库里也需要设置相应的级联,确保没有被上下文跟踪到的数据也具备同样的行为。如果你通过EF来创建数据库,那么EF会为你设置好数据库的级联。

  SetNull:依赖实体的外键被设为null。这种级联行为只对被上下文跟踪到的实体有效。数据库里也需要设置相应的级联,确保没有被上下文跟踪到的数据也具备同样的行为。如果你通过EF来创建数据库,那么EF会为你设置好数据库的级联。

  EF Core 2.0引入了一种叫作ClientSetNull的默认行为。它具有SetNull的语义,兼有Restrict的行为。从我们的经验来看,对于被跟踪的实体和数据库来说,它是最被期待也是最有用的一种行为。

  本站(LinuxIDC)所刊载文章不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。

猜你喜欢

本站最新优惠

Namesilo优惠:新用户省 $1 域名注册-优惠码:45D%UYTcxYuCloZ 国外最便宜域名!点击了解更多

特别优惠:免费赠送 $100 Vultr主机-限时优惠!英文站必备海外服务器!点击了解更多

VPS优惠:搬瓦工优惠码:BWH3OGRI2BMW 最高省5.83%打开外面世界的一款主机点击了解更多

加入电报群

【江湖人士】(jhrs.com)原创文章,作者:江小编,如若转载,请注明出处:https://jhrs.com/2018/2692.html

扫码加入电报群,让你获得国外网赚一手信息。

文章标题:Entity Framework Core 20的突破性变更

(0)
江小编的头像江小编
上一篇 2018-01-12
下一篇 2018-01-12

热门推荐

发表回复

登录后才能评论
畅访海外网站,外贸/外企/科技工作者专用工具,无缝体验真实的互联网,解锁LinkedIn访问
$19.95 /年
直达官网