2011-12-24 11 views
8

mający 2 oddzielnych baz danych z tego samego schematu, muszę skopiować jednostek (rekordów) z jednej bazy do drugiej za pomocą Entity Framework 4.Korzystanie Entity Framework do kopiowania elementów między bazami danych

Tworzę 2 kontekstach, ale dostaję następujący błąd, gdy dodam jeden podmiot do drugiego Kontekst:

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

wiem, że mogę uniknąć tego błędu w przypadku korzystania z metody Odłącz, ale w tym przypadku podmioty powiązane są stracone!

Przykładowy kod:

 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();     
     } 

Jak mogę wykonać taką operację? Alternatywnie, w jaki sposób mogę odłączyć jednostkę bez utraty powiązanych jednostek?

Odpowiedz

8

Po raz pierwszy komunikat o błędzie jest przydatny - jednostki mogą należeć tylko do jednego kontekstu na raz. Aby zrobić to, co chcesz, musisz najpierw uzyskać obiekt z pierwszego kontekstu przed dodaniem go do drugiego.

Tak jak powiedziałeś, zabije to powiązane podmioty. Niestety będziesz musiał poradzić sobie z tym (irytującym) aspektem Detach.

Powiązane problemy