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

本文关键字:实体 深度 复制 框架 | 更新日期: 2023-09-27 17:56:45

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

我需要制作对象的深层副本,如果用户选择并反对,它将获得分配给他的完整副本,其中包含所有导航属性和所有创建。

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

编辑:多亏了@PanagiotisKanavos所说的话,我意识到我真正想要的是分离实体。它有点解决了我的问题,但还没有完全解决,做:

ctx.Set.Detach(entity) 

分离了实体,但我丢失了所有关联,所以知道如何分离关联图的其余部分吗?

更新:经过很多实验,我已经没有想法了,我尝试了深度克隆,并删除,但是当我添加时,我给了我和例外。

如果我只分离,我会失去所有关联,所以有什么想法吗?

如何在实体框架 4.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);
 }
}