2012-03-09 60 views
0

爲簡單起見,我有一個帶有訂單表和PaymentMethod表的數據庫。這是一對多的關係。訂單表有許多描述訂單的字段,PaymentMethod只有一個ID和一個名稱。我已經在EF中映射了一個關聯,並且Order表中有一個名爲「PaymentMethodId」的外鍵。我有一個名爲PaymentMethodType的枚舉,這不是問題。我已經在下面測試了相同的代碼,但沒有涉及枚舉。我有很多其他表格都有相同的情況,並且有另外一種關係,但現在只有這個問題。實體框架POCO外鍵分配掛起

在下面的代碼中,我創建一個新的訂單,一切工作正常。如果我稍後在我的程序中獲得相同的訂單並嘗試將PaymentMethodId設置爲不同的值,則程序將掛起約25秒。我試圖通過POCO對象跟蹤代碼,它似乎一遍又一遍地循環/設置PaymentMethod和PaymentMethodId。任何建議或建議非常感謝!請隨時提問我可能遺漏的任何細節。我將POCO和SQL Server 2008 R2一起使用Entity Framework 4.0。

 int orderid; 
     using (PinotsPaletteEntities context = new PinotsPaletteEntities()) 
     { 
      Order order = new Order(); 
      //assign other order information 
      order.PaymentMethodId = (int)PaymentMethodType.CreditCard;    
      context.Orders.AddObject(order); 
      context.SaveChanges(); 
      orderid = order.Id; 
     } 

     using (var context = new PinotsPaletteEntities()) 
     { 
      Order order2 = context.Orders 
       .Where(x => x.Id == orderid) 
       .FirstOrDefault(); 
      order2.PaymentMethodId = (int)PaymentMethodType.Cash; //hangs here for 25secs 
      context.SaveChanges(); 
     } 
+0

您使用POCO T4模板嗎?你能否驗證延遲不是由一些意外的延遲加載引起的? – 2012-03-10 10:15:05

+0

如果您刪除PaymentMethodId屬性並設置PaymentMethod對象,會發生什麼情況? – 2012-03-11 21:46:34

+0

如果將PaymentMethod對象設置爲null或一個好的對象,我會得到相同的結果。 PaymentMethodId也是一樣。 – user1260112 2012-03-12 16:33:22

回答

0

我也經歷了使用實體框架V4.1和「ADO.NET C#POCO實體發生器」(最近更名爲EF 4.x POCO Entity Generator for C#)設置屬性的問題。我的項目是使用ASP.NET MVC 3編寫的C#。

我的症狀是改變屬性可以很好地工作與相對較小的數據集(幾十)。從遺留系統中導入記錄(大約70,000個,包含數十萬條相關記錄)之後,設置屬性基本上會掛起應用程序。和你一樣,我遇到的問題是「類型」表的外鍵。

奇怪的是,設置一些幾乎相同的屬性可以正常工作。並設置屬性一次將正常工作。但是在類型之間切換會掛起應用程序。

我通過遷移到較新的EF 4.x DbContext Generator for C#解決了這個問題,至少目前是這樣。通過Nuget進行升級,這也吸引了最新版本的實體框架,這也可能有助於解決問題。遷移到DbContext需要最少的代碼更改。生成的POCO類現在非常乾淨,沒有前面T4模板創建的「修復」代碼頁。