2011-12-24 193 views
8

與具有相同模式的2個獨立的數據庫之間的複製的實體,我需要使用實體框架4.使用實體框架數據庫

我創建2個上下文從一個數據庫複製實體(記錄)到另一個,但我收到以下錯誤,當我添加一個實體到第二語境:

An entity object cannot be referenced by multiple instances of IEntityChangeTracker. 

我知道我不能避免錯誤,如果我使用分離的方法,但在這種情況下,相關的實體都將丟失!

示例代碼:

 var cx = new MyEntities(); 

     //eager load related tables 
     var allEntities = from x in cx.Reservation.Include("Detail.MoreDetail") 
        select x; 

     // new instance of context but connected to a second database 
     var cx2 = new MyEntities(new ConnectionString...); 
     foreach (var e in allEntities) 
     { 
      //cx.Detach(reservation); // can't detach, or related entities will be lost 
      cx2.AddToReservation(reservation); // error happens here! 
      cx2.SaveChanges();     
     } 

我怎麼能執行這樣的操作? 或者,我如何分離實體而不丟失相關實體?

回答

8

一旦錯誤信息有幫助 - 實體一次只能屬於一個上下文。要做你想做的事情,你需要在第一個上下文中添加Detatch之前的每個實體。

就像你說的,這會殺死相關實體。不幸的是,你必須處理Detach這個(煩人的)方面。