【问题标题】:Need help handling object with the same key需要帮助处理具有相同键的对象
【发布时间】:2011-03-02 12:43:54
【问题描述】:

我遇到异常

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

我有一个分离的实体,并且在 ObjectStateManager 中也有键,这是我不明白的。这怎么可能?

我要做的是在实体从客户端(Asp MVC 控制器)返回时将其附加到上下文中。

如果我这样做

db.MyEntity.Attach(myEntity);

我得到了第一个例外。

我知道它是分离的,因为当我尝试调用时

db.MyEntity.Context.LoadProperty(myEntity, e => e.myProperty);

我感到我的实体已分离(应该是这样,为什么 ObjectStateManager 中的键是?)。

所以总结一下,我认为我的实体在 ObjectStateManager 中有键并且是分离的。我如何附上它?我错过了什么?或者我误解了什么?

感谢您的任何建议。

编辑: 正如@Ladislav Mrnka 正确陈述的那样,我的问题是我在一个请求处理中加载了具有相同 ID 的实体。我这样做是因为我想要实体的原始值进行比较,如果有问题我想将它显示给用户,但我需要附加它,这是有问题的,因为 ObjectStateManager 中仍然存在具有旧值的实体。我附加了这个实体,因为我还需要显示延迟加载的属性。这样做的正确方法是什么?只是为了对实体进行新的查询?

【问题讨论】:

  • 您是否为每个请求处理创建新的上下文?你只调用一次 Attach 吗?您是否在同一请求处理中加载了具有相同 id 的实体?
  • 我为每个请求创建新的上下文。我只附加一次,但你是对的,我在同一个请求中加载具有相同 ID 的实体!!! (这可能是问题所在!)

标签: c# entity-framework-4


【解决方案1】:

您不能加载实体并附加具有相同 ID 的实体。您必须分离加载的一项或将更改合并到加载的一项中(另请检查ApplyCurrentValues 方法)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多