简单的自动化示例

我很难理解如何映射某些对象。 请回答一些关于这个简单示例的问题。

示例代码

class User { private int id; private string name; } class Group { private int id; private string name; private List users; } [DataContract] public class UserDto { [DataMember] public int id { get; set; } [DataMember] public string name{ get; set; } } [DataContract] public class GroupDto { [DataMember] public int id { get; set; } [DataMember] public string name{ get; set; } [DataMember] public List Users { get; set; } } 

地图集

 Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); 

Group映射到GroupDto ,是否必须在内部将User映射到GroupDto ,因为GroupList包含未映射的Users ? 如果是这样,你怎么做? 我的猜测是

 Mapper.CreateMap() .ForMember(g => g.id, opt => opt.Ignore()); .ForMember(g => g.name, opt => opt.Ignore()); .ForMember(g => g.Users, opt => opt.MapFrom(u => Mapper.Map(u))) 

它是否正确?

1-将GroupDto更改为:

 [DataContract] public class GroupDto { [DataMember] public int id { get; set; } [DataMember] public string name{ get; set; } [DataMember] public List Users { get; set; } } 

2-创建映射:

 Mapper.CreateMap(); Mapper.CreateMap(); // Only if you convert back from dto to entity Mapper.CreateMap(); Mapper.CreateMap(); // Only if you convert back from dto to entity 

3-这就是全部,因为自动映射器会自动将List映射到List (因为它们具有相同的名称,并且已经存在从用户到UserDto的映射)

4-当您想要映射时,请致电:

 Mapper.Map(groupEntity); 

希望有所帮助。

正如@stuartd所说,如果你改变:

 [DataContract] public class GroupDto { [DataMember] public int id { get; set; } [DataMember] public string name{ get; set; } [DataMember] public List Users { get; set; } } 

用于:

 [DataContract] public class GroupDto { [DataMember] public int id { get; set; } [DataMember] public string name{ get; set; } [DataMember] public List Users { get; set; } } 

您只需要 :

Mapper.CreateMap()

否则,改变

 Mapper.CreateMap() .ForMember(g => g.id, opt => opt.Ignore()); .ForMember(g => g.name, opt => opt.Ignore()); .ForMember(g => g.Users, opt => opt.MapFrom(u => Mapper.Map(u))) 

对于这样的事情:

 Mapper.CreateMap() .ForMember(g => g.id, opt => opt.Ignore()); .ForMember(g => g.name, opt => opt.Ignore()); .ForMember(g => g.Users, opt => opt.MapFrom(u => Mapper.Map>(g.Users))) 

这还没有经过测试,但这个想法就在这里……