如何在 EF5 中删除父项时使自引用 fk 为空 - 首先代码



我有一个问题实体。我的实体包含"问题"类型的"创建自",其中包含对创建它的问题的引用。所以一个自我参考。

现在,我使用创建源来更新原始问题,只要它存在。但是用户可以删除原始问题,使我的问题"孤立"。然而,这是完全可以的,因为它是系统的设计。

现在我把这一行添加到我的 DbContext 中:

modelBuilder.Entity<Question>().HasOptional(x => x.CreatedFrom);

但它仍然拒绝让我删除"父母"说关系妨碍了。

我想要的是能够删除父级,当我这样做时,创建源应该在任何将创建源设置为现在已删除问题的 ID 的问题上为空。

您必须将子问题加载到上下文中。如果删除父项,EF 应将所有附加子项的引用CreatedFrom设置为 null 并将其另存为数据库的更新:

using (var context = new MyContext())
{
    var parentQuestion = context.Questions
        .SingleOrDefault(q => q.Id == someId);
    if (parentQuestion != null)
    {
        context.Questions
            .Where(q => q.CreatedFrom.Id == someId)
            .Load();
        context.Questions.Remove(parentQuestion);
        context.SaveChanges();
    }
}

如果在 Question 中具有 ChildQuestions 集合属性,则可以通过将Include(q => q.ChildQuestions)添加到parentQuestion的查询并删除显式加载子项的查询来简化此操作。

最新更新