Auto Mapper在映射时保留引用

时间:2016-01-30 02:42:14

标签: c# oop automapper

我试图以一种获得现有实例的新副本的方式克隆对象。

我正在使用AutoMapper:

Mapper.CreateMap(typeof(VariableSet), typeof(VariableSet));
var destinationObject = Mapper.Map<VariableSet>(command.VariableSets[0]);
command.VariableSets.Add(destinationObject);

我有一个数组:

command.VariableSets

我正在尝试添加该数组的第0个索引的另一个对象实例。但是当我使用自动映射器时,它会通过引用创建另一个实例。因此,如果我更改第0个索引对象中的任何子属性,它也会在第1个索引对象中更新。

我尝试使用序列化反序列化方法克隆对象,但我必须使我的对象[Serializable]有自己的问题。

1 个答案:

答案 0 :(得分:0)

您可以手动创建新对象,然后映射对象到对象:

var destinationObject = 
    Mapper.Map<VariableSet, VariableSet>(command.VariableSets[0], new VariableSet());

如果您需要为VariableSet创建新对象,则可以对ICloneable的每个引用类型属性应用相同的逻辑。

然而,有几种方法可以创建对象的副本。例如,您可以实现Clone接口,然后使用click方法。它使您可以完全控制深度复制,并且不需要AutoMapper工具。您可以在这里找到大量信息:

Deep cloning objects