Mat*_*att 5 c# entity-framework
背景
我在更新EF中的实体时遇到了一些麻烦。我不断收到此错误:
“ ObjectStateManager中已经存在具有相同键的对象。ObjectStateManager无法跟踪具有相同键的多个对象”
我完全知道,显然还有一个附加的实体。但是,我目前无法对其进行跟踪。有很多代码,我已经花了很多时间了。据我所知,我AsNoTracking()在所有查询中都使用了扩展方法。
我需要的
我的问题是:在任何给定时间,我有什么办法可以看到ObjectStateManager中的实际内容?如果在调试过程中可以看到其中的项目,则可以更快地找到其来源。
如果上述方法不可行,我将对如何最好地解决此问题提供任何建议,这就像现在的大海捞针一样。
有什么方法可以在任何给定时间查看 ObjectStateManager 中的实际内容吗?如果我可以在调试过程中看到其中的项目,我可以更快地追踪到它的来源。
您还可以使用 Visual Studio 调试器的快速监视功能查看 ObjectStateManager 中的内容。路径是:
上下文 -> ObjectContext -> ObjectStateManager -> 非公共成员
这个问题有帮助:
确定实体是否附加到 dbContext 的最合理方法是什么?
我是这样实现的:
var attachedEntity = context.ChangeTracker.Entries<T>().FirstOrDefault(x => x.Entity.Id == entity.Id);
// If the entity is already attached.
if (attachedEntity != null)
{
// Set new values
attachedEntity.CurrentValues.SetValues(entity);
}
else
{
// Else attach the entity (if needed)
if (context.Entry(entity).State == EntityState.Detached)
{
Entities.Attach(entity);
}
// Set the entity's state to modified
context.Entry(entity).State = EntityState.Modified;
}
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
Entities注意:上面IDbSet<T>的context.Set<T>()代码来自我的通用存储库中的 Update() 方法。