Entity Framework 5实体的深度复制应该怎么完成?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (30)

我正在使用实体框架5(DBContext),我试图找到深度复制实体(即复制实体和所有相关对象)的最佳方法,然后将新实体保存在数据库中。我怎样才能做到这一点?我研究过使用扩展方法CloneHelper但我不确定它是否适用DBContext

提问于
用户回答回答于

克隆一个实体的一个便宜的简单方法:

var originalEntity = Context.MySet.AsNoTracking()
                             .FirstOrDefault(e => e.Id == 1);
Context.MySet.Add(originalEntity);
Context.SaveChanges();

AsNoTracking() - 当你加载这样的实体时,上下文不知道它,当你调用SaveChanges时,它会把它当作一个新的实体。

如果MySet有一个引用,MyProperty并且你想要它的副本,只需使用Include

var originalEntity = Context.MySet.Include("MyProperty")
                            .AsNoTracking()
                            .FirstOrDefault(e => e.Id == 1);
用户回答回答于

不要求您专门运行查询来获取数据以进行克隆。可以使用此方法创建已从数据库中获取的实体的克隆。

//Get entity to be cloned
var source = Context.ExampleRows.FirstOrDefault();

//Create and add clone object to context before setting its values
var clone = new ExampleRow();
Context.ExampleRows.Add(clone);

//Copy values from source to clone
var sourceValues = Context.Entry(source).CurrentValues;
Context.Entry(clone).CurrentValues.SetValues(sourceValues);

//Change values of the copied entity
clone.ExampleProperty = "New Value";

//Insert clone with changes into database
Context.SaveChanges();

扫码关注云+社区

领取腾讯云代金券