0

重複の可能性:
. ObjectStateManagerObjectStateManager に同じキーを持つオブジェクトが既に存在します。同じキーを持つ複数のオブジェクトを追跡することはできません。

GridView の ObjectDataSource で Entity Framework を使用しました。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;
        }
    }

この問題を解決するのを手伝ってくれる人はいますか?

4

1 に答える 1

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

于 2011-06-30T13:05:16.117 に答える