仍然无法首先使用实体框架代码使用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)其外键和Reference属性,并且数据库中的其他记录受到影响也不会造成任何危害。仍然没有加载。
那么,为什么仍然缺少此功能呢?有隐藏的障碍吗?
最佳答案
该功能可能未实现,因为通常所做的更改只会影响实际在工作单元中的对象。级联不可扩展。
而且我还认为,软删除在大多数情况下会更好。也许那是给你的东西?
您可能还想研究域驱动的设计。这也包括正确使用工作单元(带有汇总)。
顺便说一句,您的解决方案使用种子方法编辑数据库。最好使用迁移的Up()方法。
关于entity-framework - 为什么在 Entity Framework 6中仍未实现ON DELETE SET NULL?有障碍吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20932130/