2013-04-20 2 views
4

У меня есть что-то вроде этого:AutoMapper настройки свойств к нулю на объект назначения

public class DomainEntity 
{ 
    public string Name { get; set; } 
    public string Street { get; set; } 
    public IEnumerable<DomainOtherEntity> OtherEntities { get; set; } 
    public IEnumerable<DomainAnotherEntity> AnotherEntities { get; set; } 
} 

public class ApiEntity 
{ 
    public string Name { get; set; } 
    public string Street { get; set; } 
    public int OtherEntitiesCount { get; set; } 
} 

И следующая конфигурация картографа:

Mapper.Configuration.AllowNullCollections = true; 

Mapper.CreateMap<DomainEntity, ApiEntity>(). 
    ForSourceMember(e => e.OtherEntities, opt => opt.Ignore()). 
    ForSourceMember(e => e.AntherEntities, opt => opt.Ignore()). 
    ForMember(e => e.OtherEntitiesCount, opt => opt.MapFrom(src => src.OtherEntities.Count())); 

Mapper.CreateMap<ApiEntity, DomainEntity>(). 
    ForSourceMember(e => e.OtherEntitiesCount, opt => opt.Ignore()). 
    ForMember(e => e.OtherEntities, opt => opt.Ignore()). 
    ForMember(e => e.AnotherEntities, opt => opt.Ignore()); 

Чтобы получить ApiEntity от DomainEntity Я использую var apiEntity = Mapper.Map<DomainEntity, ApiEntity>(myDomainEntity);

Чтобы получить объединенную DomainEntity из ApiEntity, я использую var domainEntity = Mapper.Map(myApiEntity, myDomainEntity);

Но при использовании свойства OtherEntities и AnotherEntities установлены на null - даже когда они имели значения перед вызовом отображения от myApiEntity до myDomainEntity. Как я могу избежать этого, так что они действительно сливают, а не только заменяют значения?

Спасибо за любую помощь.

+0

Какую версию 'AutoMapper' вы используете? Ваш сценарий работает нормально для меня на '2.2.1'. – Mightymuke

+0

Я использую последнюю версию, доступную на NuGet, которая в настоящее время является 2.2.1 –

ответ

7

Я думаю, что вы ищете UseDestinationValue вместо Ignore:

Mapper.CreateMap<ApiEntity, DomainEntity>(). 
    ForSourceMember(e => e.OtherEntitiesCount, opt => opt.UseDestinationValue()). 
    ForMember(e => e.OtherEntities, opt => opt.UseDestinationValue()). 
    ForMember(e => e.AnotherEntities, opt => opt.UseDestinationValue()); 
Смежные вопросы