使用Entity Framework在数据库之间复制实体

pvi*_*ira 8 .net c# sql-server entity-framework-4

有两个具有相同模式的独立数据库,我需要使用Entity Framework 4将实体(记录)从一个数据库复制到另一个数据库.

我正在创建2个上下文,但是当我向第二个上下文添加一个实体时,我收到以下错误:

An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
Run Code Online (Sandbox Code Playgroud)

我知道如果我使用Detach方法可以避免该错误,但在这种情况下相关实体会丢失!

示例代码:

        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();                
        }
Run Code Online (Sandbox Code Playgroud)

我该如何进行这样的操作?或者,如何在不丢失相关实体的情况下分离实体?

Ada*_*kis 8

一旦错误消息有用 - 实体一次只能属于一个上下文.为了做你想要的事情,你需要Detatch从第一个上下文中的每个实体,然后再将它添加到第二个上下文.

就像你说的,这将杀死相关实体.不幸的是,你将不得不处理这个(令人讨厌的)方面Detach.


pvi*_*ira 6

为了将来的参考,以下文章帮助我:

使用实体框架克隆Entity对象和所有相关子项