2014-02-13 3 views
2

У меня есть сущность, которая содержит словарь, и я хочу добиться того, что automapper не просто заменит словарь, но обновит его значения.Значения словаря Automapper Update

class ExampleClass 
{ 
    public string Name { get; set; } 
    public Dictionary<int, string[]> Dictionary { get; set; } 
} 

Mapper.CreateMap<ExampleClass, ExampleClass>().ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull)); 

var originalClass = new ExampleClass(); 
originalClass.Name = "Original Class"; 
originalClass.Dictionary = new Dictionary<int, string[]> 
{ 
    {0, new []{"V1", "V2", "V3"}}, 
    {1, new []{"V1", "V2", "V3"}}, 
    {2, new []{"V1", "V2", "V3"}} 
}; 

var newelyCreatedClass = new ExampleClass(); 
newelyCreatedClass.Dictionary = new Dictionary<int, string[]> 
{ 
    {1, new []{"E1", "E2", "E9"}}, 
}; 

Mapper.Map(newelyCreatedClass, originalClass); 

В приведенном выше коде, automapper странно не обновляет элемент словаря с ключом == 1 но заменяет весь оригинал с одной созданной в newelyCreatedClass.

+0

Хорошо, любая помощь? –

+0

Я мог бы использовать некоторые здесь, пожалуйста. –

+0

Мне нужна немедленная помощь, пожалуйста, я застрял в этом. Я хочу, чтобы auto mapper присоединился к 2 массивам вместо их замены, и если значение существует, просто игнорируйте его. –

ответ

0

AutoMapper просто автоматически сравнивает и устанавливает значения, если они существуют, поэтому свойство перезаписывается. Но что вы можете сделать, это использовать функцию automapper под названием Custom Value Resolvers.

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

public class CustomResolver : IValueResolver<ExampleClass, ExampleClass, Dictionary<int, string[]>> 
{ 
    public Dictionary<int, string[]> Resolve(ExampleClass source, ExampleClass destination, Dictionary<int, string[]> member, ResolutionContext context) 
    { 
     // logic to iterate through the dictionarys and resolve into dictionary containing values that you want. 
    } 
} 
Смежные вопросы