的子类的浅拷贝/克隆我们已经在我们的数据库审计表,并在更新旧的和新的值序列化为XML并存储在同一排。对象是目前深克隆这样的:创建EntityObject
public EntityObject CloneEntity(EntityObject obj)
{
DataContractSerializer dcSer = new DataContractSerializer(obj.GetType());
MemoryStream memoryStream = new MemoryStream();
dcSer.WriteObject(memoryStream, obj);
memoryStream.Position = 0;
EntityObject newObject = (EntityObject)dcSer.ReadObject(memoryStream);
return newObject;
}
虽然这个工作,它是由于相关记录生成大量数据从深克隆拉,与成千上万的读取从DB上dcSer.WriteObject(memoryStream, obj)
,最终的MemoryStream大小约为200MB,更不用说写回数据库的数据量。不理想。
所以我想这样做一个按成员的克隆,而不是,因为这是我的理解是一个按成员克隆将离开对象引用出来,避免将所有相关的实体框架模型。
所以我这样做:
public EntityObject CloneEntity(EntityObject obj)
{
EntityObjectAuditable auditable = (EntityObjectAuditable)obj; // invalid cast exception
return auditable.ShallowCopy();
}
// ....
public class EntityObjectAuditable : EntityObject
{
public EntityObjectAuditable ShallowCopy()
{
return (EntityObjectAuditable)this.MemberwiseClone();
}
}
,但我得到一个无效转换异常,因为输入EntityObject
的实际类型是与表本身的子类。
我也使用扩展方法来访问MemberwiseClone()
尝试过,但扩展方法无法访问受保护的方法。
所以,我怎样才能创建一个通用EntityObject的浅表副本?
我看到有人问前一段时间,但是我有完全相同的问题,并因此增加了,作为一个解决方案出来了回答任何人想知道! – markmnl 2012-10-11 00:24:55