【发布时间】:2014-01-22 19:17:51
【问题描述】:
仍然无法首先使用实体框架代码配置具有 ON DELETE SET NULL 规则的关系。作为一种解决方法,您必须将所有相关实体加载到内存中,然后在删除父实体时,EF 将发出 SQL 命令将其外键设置为 Null。
这个,虽然使用类似的东西自己实现它是微不足道的:
protected override void Seed(Context context)
{
context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests DROP CONSTRAINT Guest_PreferredLanguage");
context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests ADD CONSTRAINT Guest_PreferredLanguage FOREIGN KEY (LanguageID) REFERENCES dbo.Languages(LanguageID) ON UPDATE NO ACTION ON DELETE SET NULL");
}
(示例取自this post。)
我认为这种方法没有问题:加载的子实体将与数据库保持同步,因为 EF 将更新(设置为 null)它们的外键和引用属性,并且数据库中的其他记录受到影响并没有什么害处因为它们还没有被加载。
那么,为什么这个功能仍然缺失呢?是不是有什么隐藏的陷阱?
【问题讨论】:
-
id 也喜欢看到该功能,但更多的是entityframework.codeplex.com/discussions
-
@philsoady 我在那里找不到主题。添加它似乎很容易:它与级联删除没有太大区别是吗?
-
这个问题似乎离题了,因为它属于产品的功能请求站点 (data.uservoice.com/forums/…)
-
@GertArnold 如果没有正当理由缺少此功能,除了实体框架团队没有优先考虑它之外,这个问题确实是题外话。
-
在 EF7 中有一个工作项来实现它。 github.com/aspnet/EntityFramework/issues/333
标签: entity-framework ef-code-first entity-framework-6