Использование Entity Framework для копирования сущностей между базами данных - PullRequest
8 голосов
/ 24 декабря 2011

Имея 2 отдельные базы данных с одной и той же схемой, мне нужно копировать сущности (записи) из одной базы данных в другую, используя Entity Framework 4.

Я создаю 2 контекста, но получаю следующую ошибку при добавлении одной сущности во второй контекст:

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

Я знаю, что могу избежать этой ошибки, если использую метод 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();                
        }

Как я могу выполнить такую ​​операцию? В качестве альтернативы, как я могу отделить сущность, не потеряв связанных сущностей?

Ответы [ 2 ]

8 голосов
/ 24 декабря 2011

На этот раз полезно сообщение об ошибке - объекты могут принадлежать только одному контексту за раз.Чтобы сделать то, что вам нужно, вам нужно Detatch каждой сущности из первого контекста, прежде чем добавить ее во второй.

Как вы сказали, это уничтожит связанные сущности.К сожалению, вам придется иметь дело с этим (раздражающим) аспектом Detach.

6 голосов
/ 24 декабря 2011

Для дальнейшего использования мне помогла следующая статья:

Клонирование объекта Entity и всех связанных с ним потомков с использованием Entity Framework

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...