2014-02-13 4 views
2

사전이 포함 된 엔티티가 있는데 그 중 자동 완성 기능은 사전을 바꾸지 않고 값을 업데이트하는 것입니다. 이상하게 키 == 1와 사전 요소를 업데이트 할 수 있지만 newelyCreatedClass에서 만든 하나 전체 원본을 대체하지 않습니다 automapper 위의 코드에서는 Automapper 사전 값 업데이트

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); 

.

+0

어떤 종류의 도움이 필요합니까? –

+0

나는 여기에서 약간을 사용할 수 있었다. –

+0

즉각적인 도움이 필요합니다, 나는 그걸로 붙어 있습니다., 나는 그들을 대체하는 대신 2 개의 배열에 가입 자동 매퍼 싶습니다, 그리고 가치가 존재하는 경우 그냥 무시하십시오. –

답변

0

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. 
    } 
}