Копирование данных между базами данных с Entity Framework - PullRequest
0 голосов
/ 22 июля 2010

Я пытаюсь использовать структуру сущностей, чтобы взять данные (вложенные отношения) из одной БД и вставить их в другую.

Идея состоит в том, чтобы загрузить данные в виде файла XML, а затем загрузить их ион вставляется в новую БД.

Загрузка в XML проста:

var BoroughQuery = from b in Context.Borough.Include("User").Include("Location").Include("Contact").Include("Location.LocationContact") where b.Id == BoroughId select b;

BoroughModel = BoroughQuery.First();

Context.Detach(BoroughModel);

System.Runtime.Serialization.DataContractSerializer ser = new System.Runtime.Serialization.DataContractSerializer(typeof(Borough));
System.IO.DirectoryInfo TempDirectory = new System.IO.DirectoryInfo(Server.MapPath(Request.ApplicationPath + "Temp"));
if (!TempDirectory.Exists) TempDirectory.Create();
System.IO.FileInfo TempFile = new System.IO.FileInfo(TempDirectory.FullName + "\\" + BoroughModel.Key + "_" + System.DateTime.UtcNow.ToString("yyyyMMddhhmmss") + ".xml");
FileStream writer = new FileStream(TempFile.FullName, FileMode.Create);
ser.WriteObject(writer, BoroughModel);
writer.Close();

Проблема ... заключается в подключении этого чтения XML к другому контексту и сохраненииэто в DB

До сих пор у меня есть следующее, которое читает в модели из XML отлично, но в результате ничего не добавляется в БД:

DataContractSerializer ser = new DataContractSerializer(typeof(Borough));
Borough deserializedBorough = (Borough)ser.ReadObject(fleBoroughUpload.FileContent);

using (Entities Context = new Entities("name=EntitiesTarget"))
{
    Context.Attach(deserializedBorough);
    Context.SaveChanges();
}

Любая помощь будет принята с благодарностью.

ПРИМЕЧАНИЕ Поскольку обе эти БД находятся на одном и том же сервере, данные НЕ ДОЛЖНЫ отображаться как XML, но я думаю, что проблема все равно будет та же.

1 Ответ

1 голос
/ 22 июля 2010

Вы говорите о n-уровневой ситуации.

См. построение n-уровневых приложений с EF и присоединением и отсоединением объектов .

Просто вызов Attach говорит EF, что объект не изменился.

Если это новый объект (например, вы знаете , это вставка, а не операция обновления), тогда вы должны позвонить AddObject вместо Attach, и все готово.Однако, если XML представляет некоторый набор изменений в возможно существующем объекте, у вас есть больше работы (подробности см. На страницах MSDN).

...