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

本文关键字:实体 插入 框架 ObjectContext | 更新日期: 2023-09-27 18:21:53

我创建这个是希望能为一些人节省一些浪费的时间,或者在我的情况下是一个周六。

问题如下:

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

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

问题是一个案件发生了相关事件。我添加了一个上下文感知项目,称为偶发事件,我正在通过上下文查找,就像一样

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

当代码运行时,我可以看到那个模型。事件具有EntityKey,状态为"已添加",并且正在添加重复项。不仅如此,保存后的结论参考是新创建的记录。

我想我马上就知道了答案,我只需要像一样提前通过Attach运行事件模型

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

错了。尽管它的EntityState保持不变,但它仍然输入了一个重复项。除此之外,生成的引用是原始事件,而不再是重复事件。

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

解决方案是用类似的DBContext强制转换到ObjectContext中并覆盖它

if (model.Incident != null)
{
    DbContext dbContext = new DbContext(context, true);
    dbContext.Entry(model.Incident).State = EntityState.Unchanged;
}

尽管Incident实体的EntityState保持不变,但ObjectContext仍然将其视为新实体。DBContext似乎更具有状态意识。

我希望这能帮助到别人。