2013-01-02 47 views
0

我張貼了這個問題之前,它解釋了我在做什麼很徹底: ASP.NET MVC3 and Entity Framework v4.1 with error An entity object cannot be referenced by multiple instances of IEntityChangeTracker與仍然存在的問題「的實體對象不能被IEntityChangeTracker的多個實例引用」使用MVC3 EF4.1

的問題是,在我解決上述問題中的這個特殊問題之後,這個問題已經多次出現了迷你推車,丟車,結賬頁面等問題。進一步的問題與此有關,但不一定容易識別,並花費大量的時間進行故障排除,查找和修復。我寧願發佈我最常遇到的具體問題,而不願意發現我是否在做一些錯誤的事情。通過將購物車(實體)存儲在會話中,還是將其更換爲更好的方式(分離方法如下所示),還是有更簡單的方法來調試這些類型的問題?這裏是我的分離方法的更新:

public void DetachCart(Cart cart) 
    { 
     var objectContext = ((IObjectContextAdapter)context).ObjectContext; 
     if (cart.Customer != null) 
     { objectContext.Detach(cart.Customer); } 
     if (cart.ShipFromAddress != null) 
     { 
      var shipFromAddress = cart.ShipFromAddress; 
      objectContext.Detach(cart.ShipFromAddress); 
      cart.ShipFromAddress = shipFromAddress; 
     } 
     if (cart.ShipToAddress != null) 
     { 
      var shipToAddress = cart.ShipToAddress; 
      objectContext.Detach(cart.ShipToAddress); 
      cart.ShipToAddress = shipToAddress; 
     } 
     if (cart.Lines != null && cart.Lines.Count > 0) 
     { 
      List<CartLine> lines = new List<CartLine>(); 
      foreach (var item in cart.Lines.ToList()) 
      { 
       objectContext.Detach(item); 
       lines.Add(item); 
      } 
      cart.Lines = lines; 
     } 
     objectContext.Detach(cart); 
    } 

謝謝你對這個問題可以提供的任何見解。這是一條漫長的痛苦之路。

UPDATE 看來,我的很多麻煩從CartModelBinder葉子在連接狀態,而不是分離的狀態下,車的事實造成的。通過改變它已經消除了我目前的問題,並刪除了我必須分離的幾個地方以避免此問題。但是,我的問題「是否有更簡單的方法來解除所有問題,或調試/跟蹤這些問題的方法」仍然存在。

回答

1

有一種解決方案 - 不要在視圖或模型綁定器中使用實體。只有在將數據保存到數據庫時,才使用視圖模型並將其轉換爲實體。它可以使您的應用程序更加複雜,但在解決泄露的上下文,附加和分離問題時,它將爲您節省大量時間。

+0

Cart實體的複雜性導致我避免試圖在各種視圖模型之間複製回來和第四次。這似乎並不是一個很好的決定。儘管我發佈了更新,但我認爲我現在可以。謝謝拉迪斯拉夫,這對我未來的項目肯定會有幫助。 – Crob

相關問題