具有实体框架 6 的 ObjectContext 在现有相关实体上插入重复项
Posted
技术标签:
【中文标题】具有实体框架 6 的 ObjectContext 在现有相关实体上插入重复项【英文标题】:ObjectContext with Entity Framework 6 inserting duplicates on existing related entities 【发布时间】:2015-11-15 00:01:14 【问题描述】:我创建它是为了希望为一些人节省一些浪费的时间,或者在我的情况下是星期六。
问题如下:
我的主要实体在这种情况下被称为 case 并且在通过验证后,我会保存到对象上下文中,就像这样
context.AddToCases(caseModel);
context.SaveChanges();
问题是案件有相关事件。我正在添加一个名为 event 的上下文感知项目,我正在像这样通过上下文查找它
caseModel.Incident = context.Incidents.SingleOrDefault(i => i.IncidentNumber == jumpIncidentNumber);
当代码运行时,我可以看到 model.Incident 有一个 EntityKey 并且状态为已添加,并且正在添加重复项。不仅如此,保存后的结论性引用是对新创建的记录。
我以为我马上就知道答案了,我只需要像这样预先通过 Attach 运行事件模型
context.Attach(incident);
caseModel.Incident = incident;
错了。虽然它的 EntityState 没有改变,但它仍然输入了一个副本。除了这一次,生成的引用是原始事件,不再是副本。
【问题讨论】:
【参考方案1】:解决方案是像这样使用 DBContext 完全转换并覆盖 ObjectContext
if (model.Incident != null)
DbContext dbContext = new DbContext(context, true);
dbContext.Entry(model.Incident).State = EntityState.Unchanged;
尽管事件实体的 EntityState 未更改,但 ObjectContext 仍将其识别为新实体。 DBContext 似乎更能感知状态。
我希望这对某人有所帮助。
【讨论】:
以上是关于具有实体框架 6 的 ObjectContext 在现有相关实体上插入重复项的主要内容,如果未能解决你的问题,请参考以下文章
n 层项目中的实体框架 ObjectContext 生命周期