我想深度复制一个实体,我正在寻找最好的方法。我也很关心性能。
我计划让我的所有实体都实现 ICloneable,其中 Clone() 基本上会影子复制并克隆所有引用。
例如:
[DataContract()]
class MyEntity {
public int id;
public string name;
public EntitySet<AnotherEntity> myOtherEntity;
}
MyEntity Clone() {
Entity ent = new Entity();
ent.name = this.name;
ent.myOtherEntity = this.myOtherEntity.Clone();
return ent;
}
这样做的好方法吗?或者我应该用 linq 加载实体,删除所有主键(将 id 设置为 0),然后使用 Create(entity) 函数复制它?反射是否也是一个有效的解决方案(不会太慢)?至少反射可以避免更新我的实体类(例如新成员)而不更新克隆函数时的问题...
最佳答案
ICloneable 不是一个坏的解决方案;毕竟,它是为此目的而设计的。我不确定是否要为每个实体类型编写一个实现,但您可以使用代码生成器来解决这个问题。但是要小心循环引用。但是,如果您在执行此操作时完全关心性能,那么您可能做得太频繁了。如果性能是这里的一个问题,我想知道您实际上要解决什么问题。
关于.net - 克隆(深层复制)实体 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467606/