我有一个方法,我试图创建一个Address对象的副本。 Address具有StateProvince的外键引用。
// ... get address from context
var newAddress = Util.DataContractSerialization<Address>(sourceAddress); // serializes and deserializes into/from memory
newAddress.AddressId = Guid.Empty;
ctx.Attach(newAddress); // error!
我该怎么做?这个错误的原因是因为当我调用Attach时,StateProvince属性已经在上下文中,它试图附加整个对象图。我目前的解决方法是一个帮助方法,它显式复制StateProvinceId而不是StateProvince对象。
我认为在其他情况下可能会发生此错误,因此我想找出解决此问题的正确方法。
答案 0 :(得分:2)
是的,因为序列化会对整个对象图进行深度克隆。当您只需要克隆顶级对象时,您不需要深度克隆。我通常是通过在实体上实现ICloneable
并在没有关系的情况下手动克隆实体来实现这一点。除了manullay之外没有更好的方法将所有导航属性标记为不可序列化(IgnoreDataMemberAttribute
或在数据协定序列化时不标记为DataMember
。