我创造这个希望能为少数人节省一些浪费的时间,或者在我的情况下为一个星期六。
问题如下:
我的主要实体在这个实例中被称为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没有变化,但它仍然是重复的。除此之外,结果引用是原始事件,不再是重复事件。
答案 0 :(得分:0)
解决方案是使用DBContext(如此
)强制转换并覆盖ObjectContextif (model.Incident != null)
{
DbContext dbContext = new DbContext(context, true);
dbContext.Entry(model.Incident).State = EntityState.Unchanged;
}
尽管事件实体的EntityState未更改,但ObjectContext仍将其识别为新的。 DBContext看起来更像是状态。
我希望这有助于某人。