我需要使用EF将数据从一个数据库复制到另一个数据库。例如。我有以下表关系:Forms-> FormVersions-> FormLayouts ...我们在两个数据库中都有不同的表单,我们希望将它们收集到一个数据库中。基本上我想从一个数据库递归加载Form对象,并将其保存到另一个数据库中,并带有所有引用。另外,如果在第二个数据库中存在具有相同ID的对象,我还需要更改对象和相关对象的ID。使用EF从两个数据库之间复制记录
到现在为止我有以下代码:
Form form = null;
using (var context = new FormEntities())
{
form = (from f in context.Forms
join fv in context.FormVersions on f.ID equals fv.FormID
where f.ID == 56
select f).First();
}
var context1 = new FormEntities("name=FormEntities1");
context1.AddObject("Forms", form);
context1.SaveChanges();
我收到了如下错误:“当属性的当前值为null该属性的EntityKey只能设置”
你能帮助实施吗?
我试过你的解决方案。它工作正常,但只适用于Form对象。当我分离窗体时,我会丢失所有相关的对象。所以如果Form有10个FormVersions并且我做了分离,Form就有0个FormVersions。我想实现复制所有层次结构,而不仅仅是根对象。 – zosim
是的,它正是发生了什么,没有解决方案,除了创建窗体及其所有关系的完整副本(最简单的解决方案是序列化和反序列化窗体以获得完整的克隆 - 但窗体必须可序列化)。 –
谢谢。序列化对我来说是一个解决方案。但是在用于生成EF模型的默认模板中,实体集合有[XmlIgnoreAttribute()]属性。它意味着相关对象不会被序列化。有没有任何选项如何序列化相关对象而无需修改模板? – zosim