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

时间:2011-06-30 12:37:37

标签: asp.net objectdatasource entitydatasource

  

可能重复:
  . The An object with the same key already exists in the ObjectStateManagerObjectStateManager cannot track multiple objects with the same key.

我已经使用Entity Framework和ObjectDataSource for GridView。虽然我尝试使用updatemethod我得到了运行时错误消息

  

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

这是我的aspx文件代码:

    <asp:ObjectDataSource ID="odsCustomerList" runat="server" DataObjectTypeName="EF.POCO.Customer"
                TypeName="EF.BusinessLayer.CustomerMaster" SelectMethod="ReadAllCustomer" SortParameterName="sortExpression"
                ConflictDetection="CompareAllValues" OldValuesParameterFormatString="orig{0}"  
                UpdateMethod="UpdateCustomer" DeleteMethod="DeleteCustomer">
    </asp:ObjectDataSource>

这是我的DA层代码文件

     public void UpdateCustomer(Customer customer, Customer origCustomer)
    {
        try
        {

            BusinessEntityBase.Entities.Customers.MergeOption = System.Data.Objects.MergeOption.NoTracking;
            BusinessEntityBase.Entities.Customers.Attach(origCustomer);
            BusinessEntityBase.Entities.ApplyCurrentValues("Customer", customer);
            BusinessEntityBase.Entities.SaveChanges();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

是否有人可以帮助解决此问题?

1 个答案:

答案 0 :(得分:1)

您如何管理上下文(ObjectContext) - 多个请求之间是否共享BusinessEntityBase.Entities?这可能是一个问题 - 因为当您尝试从其他请求更新对象时,从一个请求检索的对象可能会发生冲突(因此attach将失败)。请参阅此链接以获取可能的解决方案:http://dotnetslackers.com/articles/ado_net/Managing-Entity-Framework-ObjectContext-lifespan-and-scope-in-n-layered-ASP-NET-applications.aspx