你的位置:首页 > 软件开发 > ASP.net > EF级联删除

EF级联删除

发布时间:2015-05-24 00:10:11
引言 在主表中指定Key,子表中指定Required后,并不会在数据库中生成级联删除的外键。那怎么才能使EF在数据中生成级联删除的外键? SQLServer数据库中级联删除功能配置界面: 上图中显示只用[required]特性后生成的外键没有级联删除动作。 ...

引言

 

 

在主表中指定Key,子表中指定Required后,并不会在数据库中生成级联删除的外键。那怎么才能使EF在数据中生成级联删除的外键?

SQLServer数据库中级联删除功能配置界面:

EF级联删除

上图中显示只用[required]特性后生成的外键没有级联删除动作。

 

看似正确的解决方案。(治标的处理方式)

版本:EF6.0.1 RC

一对多场景,在子对象映射中开启级联删除情况下,删除父对象将自动删除其下所有子对象,需要注意一些事项:

 √ 需要保证DbContext中已经加载了该父对象的所有子对象。

 X  如果DbContext内未加载子对象将不级联删除子对象,

 X 如DbContext只加载部分子对象也只级联删除这些子对象。

因此在查询父对象只应该使用Include("子对象属性名")查询(请看示例代码3)或者在DbContext另外把其下所有子对象查询出来(请看示例代码4),再进行对父对象的删除方可级联删除子对象。

但注意以上所述情况只适用于关联子项比较少的情况,数据量少的演示测试Demo可以,工作中应该杜绝该类解决方案的出现。

 

真正的解决方案(治本的处理方式)

 

以下摘自是EntityFrameWork 官网原文

----------------------------------------------------------------

You can configure cascade delete on a relationship by using the WillCascadeOnDelete method. If a foreign key on the dependent entity is not nullable, then Code First sets cascade delete on the relationship. If a foreign key on the dependent entity is nullable, Code First does not set cascade delete on the relationship, and when the principal is deleted the foreign key will be set to null.

You can remove these cascade delete conventions by using:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>()

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:EF级联删除

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录