实体框架4使用查找参考保存实体克隆的问题

时间:2011-04-01 00:56:19

标签: .net entity-framework-4

我有一个方法,我试图创建一个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对象。

我认为在其他情况下可能会发生此错误,因此我想找出解决此问题的正确方法。

1 个答案:

答案 0 :(得分:2)

是的,因为序列化会对整个对象图进行深度克隆。当您只需要克隆顶级对象时,您不需要深度克隆。我通常是通过在实体上实现ICloneable并在没有关系的情况下手动克隆实体来实现这一点。除了manullay之外没有更好的方法将所有导航属性标记为不可序列化(IgnoreDataMemberAttribute或在数据协定序列化时不标记为DataMember