具有实体框架6的ObjectContext在现有相关实体上插入重复项

时间:2015-11-15 00:01:15

标签: c# asp.net-mvc entity-framework

我创造这个希望能为少数人节省一些浪费的时间,或者在我的情况下为一个星期六。

问题如下:

我的主要实体在这个实例中被称为case,在通过验证时,我会保存到对象上下文,就像这样

context.AddToCases(caseModel);
context.SaveChanges();

问题是案件发生了相关事件。我正在添加一个名为事件的上下文感知项,我正在通过上下文查找

caseModel.Incident = context.Incidents.SingleOrDefault(i => i.IncidentNumber == jumpIncidentNumber);

当代码运行时,我可以看到model.Incident有一个EntityKey并且添加了状态,并且正在添加重复项。不仅如此,保存后的结论参考是新创建的记录。

我以为我立即知道了答案,我只需事先通过Attach运行事件模型

context.Attach(incident);
caseModel.Incident = incident;

错误。虽然它的EntityState没有变化,但它仍然是重复的。除此之外,结果引用是原始事件,不再是重复事件。

1 个答案:

答案 0 :(得分:0)

解决方案是使用DBContext(如此

)强制转换并覆盖ObjectContext
if (model.Incident != null)
{
    DbContext dbContext = new DbContext(context, true);
    dbContext.Entry(model.Incident).State = EntityState.Unchanged;
}

尽管事件实体的EntityState未更改,但ObjectContext仍将其识别为新的。 DBContext看起来更像是状态。

我希望这有助于某人。