在实体框架中复制实体?

时间:2011-11-18 09:34:11

标签: wpf entity-framework entity

例如,我有一个绑定到客户实体的wpf窗口(假设它是cus1)。然后我从上下文加载另一个实体:

customer cus2 = context.customers.where(x=>x.id=10).FirstOrDefault();

现在我想要cus1 = cus2?我可以这样做:

cus1.name = cus2.name;
cus1.address = cus2.address;
...
...

这种方式符合我的情况(表单中的文本框内容会立即更改为cus2的值)但是我想知道是否还有更短的因为cus1 = cus2不起作用?

由于

3 个答案:

答案 0 :(得分:2)

您可以使用memberwiseClone方法创建业务对象的浅表副本: 见http://msdn.microsoft.com/de-de/library/system.object.memberwiseclone.aspx

答案 1 :(得分:1)

如果要使用数据存储区中的最新值更新内存中Customer实体的值,可以在ObjectContext上使用Refresh方法。

这是documentation

在你的情况下,它看起来像:

context.Refresh(RefreshMode.StoreWins, cus1);

如果您真的想要映射两个实体,可以查看AutoMapper。 AutoMapper将通过默认设置自动将实体映射到您,帮助您根据需要进行调整。

答案 2 :(得分:1)

您也可以使用序列化或反射来自行完成。然而,两种方法都比较慢,直接写它。

看看这篇文章。也许你会觉得它很有帮助:

http://www.codeproject.com/KB/dotnet/CloningLINQ2Entities.aspx

编辑: 顺便说一句。请记住,使用MemberwiseClone,如果ReferenceTypes将复制引用,而不是对象。