2011-01-28 59 views
0

實體框架旋轉起來的多重執行緒,試圖運行下面的代碼:如何避免實體框架

 using (MyEntities ctx = new myEntities()) 
     { 
      Entity.Customers.Build buildId = new ctx.Build(); 
      buildId.CustomerService = customerService; 
      buildId.datCreatedDate = DateTime.Now; 
      buildId.strBuildSchema = schema; 
      buildId.Status = "Success"; 
      ctx.AddToBuilds(buildId); 
      ctx.SaveChanges(); 
     } 

錯誤結果「的實體對象不能被IEntityChangeTracker的多個實例引用」。

據我所知,問題在於我創建的Build對象來自Entity Framework上下文的新實例,它與執行AddToBuilds()語句的上下文不同。

但是我無法弄清楚如何克服這個問題。我似乎無法通過實體上下文對象的實例創建新的Build,即上面代碼中的ctx?有沒有辦法做到這一點,或者我錯過了另一個明顯的解決方法?

乾杯, 馬特

回答

0

的問題是,你相關聯,其被附接到一個上下文,在上面的代碼(customerService?)與另一個實體,buildId,其被附接至ctx未示出的實體。不要這樣做。一次使用一個上下文。

0

「customerService」(或者'schema')屬於另一個EntityTracker。擺脫這個最簡單的方法是添加在裏面裝的CustomerService代碼下面的代碼行(注意,作出有關的CustomerService的類名的假設在這裏):

ctx.CustomerService.MergeOptions = MergeOptions.NoTracking; 

這行代碼告訴上下文「我不會對CustomerService對象進行任何更改,所以請勿打擾跟蹤它們」。