2017-06-19 56 views
1

時,深度複製才能正常工作我已經實施了深度複製方法,在進入此方法時 - 類按預期複製。只有在進入方法

但是,如果我跨過該方法並檢查類實例,一些屬性不能正確複製。

Profile profile = new Profile(); 
profile = Model.Copy<Profile>(Profile.GetProfileById(ProfileID)); 
profile.Save(); 

上面的代碼顯示了在哪裏創建類實例並調用了副本。

符合數據庫,我需要複製的配置文件在AddressCollection屬性中有2個項目。

如果我在行profile.Save()上放置斷點並逐步複製方法,則實例未被正確複製,並且AddressCollection屬性有0個項目。

但是,如果我真的進入複製方法,實例被正確複製並返回AddressCollection與2項。

複製方法

public T Copy<T>(T oldObject) where T : CRMBusinessObjectBase 
{ 
    return Copy<T>(oldObject, null, null); 
} 

public T Copy<T>(T oldObject, CRMBusinessObjectBase parentObject, string parentProperty) where T : CRMBusinessObjectBase 
     { 
      //Create copy of business object 
      T copy = null; 

      System.Runtime.Serialization.Formatters.Binary.BinaryFormatter sz = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 

      //Serialize and then deserialize to a new object 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       sz.Serialize(ms, oldObject); 
       ms.Position = 0; 
       copy = (T)sz.Deserialize(ms); 
      } 

      //Set business object as new 
      copy.SetAsNew(); 

      //Set parent property if specified 
      if (parentObject != null && !string.IsNullOrEmpty(parentProperty)) 
      { 
       copy.GetType().GetProperty(parentProperty).SetValue(copy, parentObject, null); 
      } 

      return copy; 
     } 

我曾試圖改變BinaryFormatter使用DataContractSerializer沒有任何的運氣。 我也嘗試使用反射而不是序列化,併發生同樣的問題。

不太確定問題出在哪裏。

截圖

副本 enter image description here 副本 enter image description here

+0

也許這些屬性不被歸爲'Serializable'? –

+0

該類是'Serializable',這不能應用於屬性 – DNKROZ

+0

你是對的。抱歉。但是,您可以擁有不可序列化類型的屬性,或者將某些屬性明確標記爲不可序列化。但我想你應該已經檢查了 –

回答

2

這個問題之前,之後很可能與使用監視窗口,或將鼠標懸停在變量,而調試。

http://dotdotnet.blogspot.com.au/2010/04/lazy-load-eager-debugging.html

另一件事是,調試器和專門的Visual Studio觀看 窗口,不那麼友好延遲加載,因爲監視窗口中嘗試 來評估每個屬性,使得所有懶惰的價值 加載要加載的屬性。