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)其外键和引用属性,并且数据库中的其他记录受到影响不会有任何危害,因为它们具有反正没装好.
那么,为什么这个功能仍然缺失呢?有一些隐藏的障碍吗?
该功能可能未实现,因为通常更改只会影响工作单元中实际存在的对象。级联不可扩展。
而且我还认为在大多数情况下软删除更好。也许这适合你?
您可能还想研究领域驱动设计。这还涵盖了工作单元(带有聚合)的正确使用。
顺便说一句,您的解决方案在种子方法中编辑数据库。使用 Up() 迁移方法可能会更好。
| 归档时间: |
|
| 查看次数: |
4803 次 |
| 最近记录: |