调试时可以看到ObjectStateManager中的内容吗?

Mat*_*att 5 c# entity-framework

背景

我在更新EF中的实体时遇到了一些麻烦。我不断收到此错误:

“ ObjectStateManager中已经存在具有相同键的对象。ObjectStateManager无法跟踪具有相同键的多个对象”

我完全知道,显然还有一个附加的实体。但是,我目前无法对其进行跟踪。有很多代码,我已经花了很多时间了。据我所知,我AsNoTracking()在所有查询中都使用了扩展方法。

我需要的

我的问题是:在任何给定时间,我有什么办法可以看到ObjectStateManager中的实际内容?如果在调试过程中可以看到其中的项目,则可以更快地找到其来源。

如果上述方法不可行,我将对如何最好地解决此问题提供任何建议,这就像现在的大海捞针一样。

Eri*_* J. 6

有什么方法可以在任何给定时间查看 ObjectStateManager 中的实际内容吗?如果我可以在调试过程中看到其中的项目,我可以更快地追踪到它的来源。

您还可以使用 Visual Studio 调试器的快速监视功能查看 ObjectStateManager 中的内容。路径是:

上下文 -> ObjectContext -> ObjectStateManager -> 非公共成员


Mat*_*att 1

这个问题有帮助:

确定实体是否附加到 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() 方法。