让我们采用以下E / R架构:
和相应的EDMX:
现在考虑数据库中的以下数据:
我想删除与给定路径相关的所有腿(ID = 4),因此我必须"清除"多对多表......我做了以下几点:
var p = _db.Paths.FirstOrDefault(q => q.Id == 4);
foreach(var i in p.PathsLegs)
{
_db.Entry(i).State = System.Data.Entity.EntityState.Deleted;
}
如果(就像在建议的数据样本中一样)我有一个为IdDestination
和/或IdInfo
指定的值,我在DB上下文中调用SaveChanges()
时会得到以下运行时错误:< / p>
与处于Deleted状态的实体添加关系是 不允许
如果IdDestination
或IdInfo
都是NULL,我完全没有问题......
有什么想法吗?为什么会这样?
提示:我已经尝试在DB上下文中明确包含引用的目的地/信息,但没有运气......
编辑:我几乎发现,在将标记为已删除的实体之前,将Path
和Leg
设置为null
,问题已修复...但我仍然不清楚问题的根本原因......这是与Destination
和/或Info
的关联与明确重置关联的需要之间的联系在删除实体之前Path
和Leg
?
这是正常工作代码:
var p = _db.Paths.FirstOrDefault(q => q.Id == 4);
foreach(var i in p.PathsLegs)
{
i.Path = null;
i.Leg = null;
_db.Entry(i).State = System.Data.Entity.EntityState.Deleted;
}