【发布时间】:2014-01-05 07:07:11
【问题描述】:
我很难理解如何映射某些对象。请回答有关这个简单示例的一些问题。
示例代码
class User
{
private int id;
private string name;
}
class Group
{
private int id;
private string name;
private List<User> 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<User> Users { get; set; }
}
映射器
Mapper.CreateMap<User, UserDto>();
Mapper.CreateMap<UserDto, User>();
Mapper.CreateMap<Group, GroupDto>();
Mapper.CreateMap<GroupDto, Group>();
在将Group 映射到GroupDto 时,是否必须在内部将User 映射到UserDto,因为Group 中的List<User> 包含未映射的Users?如果是这样,你如何做到这一点?我的猜测是
Mapper.CreateMap<Group, GroupDto>()
.ForMember(g => g.id, opt => opt.Ignore());
.ForMember(g => g.name, opt => opt.Ignore());
.ForMember(g => g.Users, opt => opt.MapFrom(u => Mapper.Map<Group, UserDto>(u)))
这对吗?
【问题讨论】:
-
为什么您的 GroupDTO 不包含 UserDTO?如果是这样,除了
CreateMap之外,AutoMapper 就不需要其他配置了。 -
这是我用 C# 写的关于 Automapper 的简单文章codeproject.com/Articles/986460/What-is-Automapper
-
如果有上面发布的文章的更新副本会有所帮助。我不相信它在 AutoMapper 5.x 中有效。
标签: c# wcf linq-to-entities automapper