我有以下Entity Framwork对象:
评价,舞台,公寓
评估包含许多阶段,舞台包含许多公寓。
我正在尝试删除某个阶段,如下所示:
var deletedStages =
originalEvaluation.Stages.Where(s => s.State == StateTypes.Deleted);
deletedStages.ToList().ForEach(stage =>
{
stage.Apartments.ToList().ForEach(
apartment => stage.Apartments.Remove(apartment)
);
originalEvaluation.Stages.Remove(stage);
});
deletedStages.ToList().ForEach(stage =>
{
stage.Apartments.ToList().ForEach(apartment =>
shechtmanEntities.Apartments.DeleteObject(apartment)
);
shechtmanEntities.Stages.DeleteObject(stage);
});
}
}
try
{
shechtmanEntities.SaveChanges();
}
但我一直有例外:“由于一个或多个外键属性不可为空而无法更改关系”。
我知道它与null外键有关,但我无法理解哪个?为什么?
感谢。
答案 0 :(得分:0)
尝试删除评估或舞台,并依靠级联删除删除它的子实体(在您的情况下为公寓),而不是逐个删除它们。
答案 1 :(得分:0)
如果你不能级联删除(SQL服务器可以很有趣:https://stackoverflow.com/a/6065583/613004)asdutzu建议,那么:
如果它是一对多关系(听起来像是这样),那么你需要手动删除每个子对象并在删除父对象之前保存更改。 I.E.删除公寓(或将其重新分配给另一个舞台),然后删除舞台,依此类推。
否则,如果它是多对多,并且通过实体模型公开连接表,则首先删除阶段和公寓之间的连接,然后删除阶段。如果没有,则在舞台上detach
公寓并保存更改,然后再删除舞台。