我正在开发一个使用Entity Framework 4.0的应用程序(据我所知,我们无法更改它)。
我需要制作对象的深层副本,在用户选择和对象的情况下,它将获得分配给他的完整副本,所有导航属性都已创建。
我知道在实体框架4.1及更高版本中我可以使用de AsNoTracking 然后添加它,但我不知道如何在实体框架4.0中执行此操作。 有什么简单的方法吗?
编辑:感谢@PanagiotisKanavos说我意识到我真正想要的是分离实体。 它解决了我的问题,但并不完全解决,做:
ctx.Set.Detach(entity)
分离了实体,但我丢失了所有关联,所以任何想法如何分离其余的关联图?
更新: 经过大量的实验,我已经没有想法,我已经尝试深度克隆,并且重新启动,但是当我添加i时,我给了我和例外。
如果我只是分离,我会失去所有的联想,所以任何想法?
答案 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);
}
}