如何在实体框架4.0中深度克隆/复制和实体?

时间:2015-06-17 08:20:21

标签: c# entity-framework entity-framework-4

我正在开发一个使用Entity Framework 4.0的应用程序(据我所知,我们无法更改它)。

我需要制作对象的深层副本,在用户选择和对象的情况下,它将获得分配给他的完整副本,所有导航属性都已创建。

我知道在实体框架4.1及更高版本中我可以使用de AsNoTracking 然后添加它,但我不知道如何在实体框架4.0中执行此操作。 有什么简单的方法吗?

编辑:感谢@PanagiotisKanavos说我意识到我真正想要的是分离实体。 它解决了我的问题,但并不完全解决,做:

ctx.Set.Detach(entity) 

分离了实体,但我丢失了所有关联,所以任何想法如何分离其余的关联图?

更新: 经过大量的实验,我已经没有想法,我已经尝试深度克隆,并且重新启动,但是当我添加i时,我给了我和例外。

如果我只是分离,我会失去所有的联想,所以任何想法?

1 个答案:

答案 0 :(得分:0)

您需要制作课程[Serializable]并加入

using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

然后

public static T DeepCopy<T>(T objectToCopy)
{
 using (var memStr = new MemoryStream())
 {
   var binFormatter = new BinaryFormatter();
   binFormatter.Serialize(memStr, objectToCopy);
   memStr.Position = 0;
   return (T) formatter.Deserialize(memStr);
 }
}