使用Entity Framework跨数据库复制数据

时间:2010-07-22 11:52:49

标签: .net frameworks entity

我正在尝试使用实体框架从一个数据库中获取数据(嵌套关系)并将其插入另一个数据库。

我们的想法是您将数据下载为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附加到另一个上下文并将其保存到数据库

到目前为止,我有以下内容从XML中读取模型,但没有任何内容添加到db:

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 个答案:

答案 0 :(得分:1)

你在谈论n级情况。

请参阅building n-tier applications with EFattaching and detaching objects

只是调用Attach告诉EF该对象没有改变。

如果它是一个新对象(例如,你知道它是一个插入而不是一个更新操作),那么你应该调用AddObject而不是{{ 1}},你已经完成了。但是,如果XML表示对可能存在的对象进行了一些更改,那么您还有更多工作要做(有关详细信息,请参阅MSDN页面)。