0

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

现在我使用 CreatedFrom 来更新原始问题,只要它还在。但是用户可以删除原始问题,让我的问题“孤立”。然而,这完全没问题,因为它是系统的设计。

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

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

但它仍然拒绝让我删除“父”的说法,说关系碍事。

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

4

1 回答 1

1

You must load the child questions into the context. If you delete the parent EF should set the reference CreatedFrom for all attached children to null and save this as an UPDATE to the database:

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();
    }
}

If you have a ChildQuestions collection property in Question you can simplify this by adding Include(q => q.ChildQuestions) to the query for the parentQuestion and remove the query that loads the children explicitly.

于 2013-09-21T13:43:40.320 回答