将LLBLGen实体映射到DTO

时间:2015-12-28 13:58:05

标签: c# asp.net automapper dto llblgenpro

我尝试使用AutoMapper在LLBLGen实体和DTO之间创建映射。

我的DTO看起来如下:

// Parent
public int Id { get; set; }
public List<Child> Children{ get; set; } // One to Many

// Child
public int Id { get; set; }
public int Parent { get; set; } // Foreign key to parent Id

ParentEntity包含一个与DTO列表同名的ChildCollection和一个Id(包含其他需要忽略的LLBL字段)。因此,当ParentEntity映射到父DTO时,它还应该将ChildCollection映射到子列表。

这是我到目前为止所得到的:

ParentEntity parentEntity = new ParentEntity(id);

AutoMapper.Mapper.CreateMap<ParentEntity, Parent>();
AutoMapper.Mapper.CreateMap<ChildCollection, List<Child>>();

var parent = AutoMapper.Mapper.Map<Parent>(parentEntity);

这会导致Id被映射,但List的计数为0。

我怎样才能让它发挥作用?

更新:

尝试与之前的尝试相同,但手动映射子列表也会导致同样的问题:ID被映射但List为空。

Mapper.CreateMap<ParentEntity, Parent>()
    .ForMember(dto => dto.Children, opt => opt.MapFrom(m => m.Children));

1 个答案:

答案 0 :(得分:2)

此行无效:

AutoMapper.Mapper.CreateMap<ChildCollection, List<Child>>();

而不是这样,你应该添加显式的map class to class:

AutoMapper.Mapper.CreateMap<ChildEntity, Child>();

然后你应该指定要映射的确切属性。两个属性都应具有List类型或类似(List<ChildEntity>作为源,List<Child>作为目标)。因此,如果ParentEntityParent类都具有Children属性,则您甚至不必指定:

.ForMember(dto => dto.Children, opt => opt.MapFrom(m => m.Children));

默认映射就足够了:

  Mapper.CreateMap<ParentEntity, Parent>();