的子類的淺拷貝/克隆我們已經在我們的數據庫審計表,並在更新舊的和新的值序列化爲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