2017-06-19 21 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观看 窗口,不那么友好延迟加载,因为监视窗口中尝试 来评估每个属性,使得所有懒惰的价值 加载要加载的属性。