我使用AutoMapper.Collection 3.1.2(和AutoMapper 6.0.2)
A从 ORM 中,B您不能简单地在其中重新创建集合。实际上,这正是您所需要AutoMapper.Collection的。
映射是根据 github 主页上的说明构建的AutoMapper.Collection,它说只是为了映射,Mapper.Map<OrderDTO[],Order[]>(orderDtos, orders);我尝试做同样的事情,但没有任何效果:
[TestFixture]
public class UnitTest1
{
[Test]
public void TestMethod1()
{
AutoMapper.Mapper.Initialize(cfg =>
{
cfg.AddCollectionMappers();
cfg.CreateMap<ADto, A>().EqualityComparison((dto, a) => dto.Name == a.Name);
cfg.CreateMap<BDto, B>().EqualityComparison((dto, b) => dto.Name == b.Name);
});
var aDto = new ADto(){Name = "A", Container = new List<BDto>()};
aDto.Container.Add(new BDto(){Name = "B"});
var aObj = new A(){ Name = "A" };
var dtos = new [] {aDto};
var objs = new [] {aObj};
AutoMapper.Mapper.Map(dtos, objs);
Assert.IsNotEmpty(aObj.Container);
}
}
public class ADto
{
public string Name { get; set; }
public ICollection<BDto> Container { get; set; }
}
public class BDto
{
public string Name { get; set; }
}
public class A
{
public string Name { get; set; }
public ICollection<B> Container { get; set; }
public A() { this.Container = new List<B>(); }
}
public class B
{
public string Name { get; set; }
}
那些。有一个ADto名称为“A”,还有A一个名称相同的对象。映射器应该弄清楚这是同一个对象(为什么要另外指定EqualityComparison?)并同步它们的集合。
二传手
A.Container- 它是必需的。