2011-12-24 130 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这个(烦人的)方面。