我有一个问题实体。我的实体包含"问题"类型的"创建自",其中包含对创建它的问题的引用。所以一个自我参考。
现在,我使用创建源来更新原始问题,只要它存在。但是用户可以删除原始问题,使我的问题"孤立"。然而,这是完全可以的,因为它是系统的设计。
现在我把这一行添加到我的 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
的查询并删除显式加载子项的查询来简化此操作。