实体框架6:在指定关系属性时无法删除多对多关系

时间:2018-02-27 14:56:06

标签: c# entity-framework entity-framework-6

让我们采用以下E / R架构:

E/R schema

和相应的EDMX:

EDMX

现在考虑数据库中的以下数据:

data sample

我想删除与给定路径相关的所有腿(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状态的实体添加关系是   不允许

如果IdDestinationIdInfo都是NULL,我完全没有问题......

有什么想法吗?为什么会这样?

提示:我已经尝试在DB上下文中明确包含引用的目的地/信息,但没有运气......

编辑:我几乎发现,在将标记为已删除的实体之前,将PathLeg设置为null,问题已修复...但我仍然不清楚问题的根本原因......这是与Destination和/或Info的关联与明确重置关联的需要之间的联系在删除实体之前PathLeg

这是正常工作代码:

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

0 个答案:

没有答案