如何在实体框架 4.0 中深度克隆/复制和实体
本文关键字:实体 深度 复制 框架 | 更新日期: 2023-09-27 17:56:45
我正在开发一个使用实体框架 4.0 的应用程序(据我所知,我们无法更改它)。
我需要制作对象的深层副本,如果用户选择并反对,它将获得分配给他的完整副本,其中包含所有导航属性和所有创建。
我知道在实体框架 4.1 及更高版本中,我可以使用 de AsNoTracking,然后添加它,但我不知道如何在实体框架 4.0 中做到这一点。有什么简单的方法吗?
编辑:多亏了@PanagiotisKanavos所说的话,我意识到我真正想要的是分离实体。它有点解决了我的问题,但还没有完全解决,做:
ctx.Set.Detach(entity)
分离了实体,但我丢失了所有关联,所以知道如何分离关联图的其余部分吗?
更新:经过很多实验,我已经没有想法了,我尝试了深度克隆,并删除,但是当我添加时,我给了我和例外。
如果我只分离,我会失去所有关联,所以有什么想法吗?
你需要让你的类[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);
}
}