为什么在实体框架6中仍未实现ON DELETE SET NULL?有障碍吗?

Dab*_*rnl 33 entity-framework ef-code-first entity-framework-6

仍然无法首先使用实体​​框架代码配置与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");
}
Run Code Online (Sandbox Code Playgroud)

(例子来自这篇文章.)

我可以看到这种方法没有问题:加载的子实体将与数据库保持同步,因为EF将更新(设置为null)其外键和引用属性,并且数据库中的其他记录受到影响不会有任何危害,因为它们具有反正没装好.

那么,为什么这个功能仍然缺失呢?有一些隐藏的障碍吗?

Wou*_*hut 2

该功能可能未实现,因为通常更改只会影响工作单元中实际存在的对象。级联不可扩展。

而且我还认为在大多数情况下软删除更好。也许这适合你?

您可能还想研究领域驱动设计。这还涵盖了工作单元(带有聚合)的正确使用。

顺便说一句,您的解决方案在种子方法中编辑数据库。使用 Up() 迁移方法可能会更好。