我有一个问题实体。我的实体包含一个类型为Question的CreatedFrom,其中包含对其创建的问题的引用。所以自我参考。
现在我使用CreatedFrom来更新原始问题,只要它存在。但是用户可以删除原始问题,让我的问题“孤立”。然而,这是完全可以的,因为它是系统的设计。
现在我将此行添加到我的DbContext:
modelBuilder.Entity<Question>().HasOptional(x => x.CreatedFrom);
但它仍然拒绝让我删除“父母”,说关系妨碍了。
我想要的是能够删除父级,并且当我执行CreatedFrom时,应该将任何将CreatedFrom设置为现在已删除的问题的ID的问题为空。
答案 0 :(得分:1)
您必须将子问题加载到上下文中。如果删除父EF,则应将所有附加子项的引用CreatedFrom
设置为null
,并将其作为UPDATE保存到数据库中:
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();
}
}
如果您在ChildQuestions
中有Question
集合属性,则可以通过向Include(q => q.ChildQuestions)
的查询添加parentQuestion
来简化此操作,并删除明确加载子项的查询