entity-framework - 为什么在 Entity Framework 6中仍未实现ON DELETE SET NULL?有障碍吗?

标签 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");
}

(示例取自this post。)

我看不到这种方法有什么问题:加载的子实体将与数据库保持同步,因为EF将更新(设置为null)其外键和Reference属性,并且数据库中的其他记录受到影响也不会造成任何危害。仍然没有加载。

那么,为什么仍然缺少此功能呢?有隐藏的障碍吗?

最佳答案

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

而且我还认为,软删除在大多数情况下会更好。也许那是给你的东西?

您可能还想研究域驱动的设计。这也包括正确使用工作单元(带有汇总)。

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

关于entity-framework - 为什么在 Entity Framework 6中仍未实现ON DELETE SET NULL?有障碍吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20932130/

相关文章:

c# - Entity Framework - 如何将测试数据播种到使用每类型表继承的实体?

c# - 如何对 Entity Framework Code First 映射进行单元测试?

entity-framework - ReferentialConstraint 中的依赖属性映射到一对一关系上存储生成的列错误

c# - SQLite CodeFirst 示例

c# - ef7 无法检索子集合的子对象的属性

.net - 如何在 Entity Framework 中执行 SQL BETWEEN 命令

asp.net-mvc - 何时公开 IEnumerable 而不是 ICollection?

entity-framework - 如何在 Entity Framework 迁移中使用多对五关系播种数据

entity-framework - 在 Azure 管理门户中进行设置时,无法使 EF 连接字符串正常工作?

c# - 使用 TransactionScope 在一个事务中使用多个数据库(多个 DbContext)