9

私はこのようなものを持っています:

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

使用している DomainEntity から ApiEntity を取得するにはvar apiEntity = Mapper.Map<DomainEntity, ApiEntity>(myDomainEntity);

使用している ApiEntity からマージされた DomainEntity を取得するにはvar domainEntity = Mapper.Map(myApiEntity, myDomainEntity);

ただし、これを使用する場合、プロパティOtherEntitiesとは、 からへのマッピングを呼び出す前に値があった場合でも、 にAnotherEntities設定されます。値を置き換えるだけでなく、実際にマージするようにするにはどうすればよいですか?nullmyApiEntitymyDomainEntity

助けてくれてありがとう。

4

1 に答える 1

12

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());
于 2013-04-20T23:03:47.940 に答える