简单的自动化示例
我很难理解如何映射某些对象。 请回答一些关于这个简单示例的问题。
示例代码
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
,因为Group
的List
包含未映射的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)))
这还没有经过测试,但这个想法就在这里……