2016-01-30 2 views
0

Я пытаюсь клонировать объект таким образом, чтобы получить новую копию существующего экземпляра.Auto Mapper сохраняет ссылку при сопоставлении

Я использую AutoMapper так:

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

Я массив:

command.VariableSets 

Я пытаюсь добавить еще один экземпляр объекта, который находится на 0-й индекс этого массива. но когда я использую auto mapper, он создает другой экземпляр по ссылке. Поэтому, если я изменяю любое свойство sub в 0-ом индексном объекте, оно также обновляется в первом объекте индекса.

Я попытался клонировать объект, используя метод десериализации сериализации, но я должен сделать свои объекты [Serializable], у которого есть своя проблема.

ответ

0

Вы можете создать новый объект вручную, а затем отобразить объект-объект:

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

Та же логика может быть применена для каждого ссылочного типа собственности VariableSet, если вам необходимо создать новые объекты для него тоже.

Как правило, существует несколько способов создания копии объекта. Например, вы можете реализовать интерфейс ICloneable, а затем использовать метод Clone. Это дает вам полный контроль над глубоким копированием и не требует инструмента AutoMapper. Вы можете найти массу информации здесь:

Deep cloning objects

Смежные вопросы