我在我的CommentService中使用了两个存储库。
_commentRepository
_userRepository
使用_commentRepository.GetAll()函数我获得了所有评论的列表,其中包含以下信息:[Id],[Content],[UserId]。
我尝试创建一个列表,其中包含_userRepository可以获取的所有注释和一些匹配的用户信息,并将其存储在DTO中。
public ListOutput<CommentUserDto> GetCommentsWithUserInformation()
{
var comments = _commentRepository.GetAll();
// TODO: Add comment and user information to CommentUserDto.
return new ListOutput<CommentUserDto>
{
Items = Mapper.Map<List<CommentUserDto>>(comments)
};
}
我该如何做到这一点?
我发现了一些可能的想法:
编辑:
评论模型:
public class Comment
{
public virtual string Content { get; set; }
public virtual DateTime CreationTime { get; set; }
public virtual long UserId { get; set; } // Id of User that posted Comment (always filled in)
}
用户模型:
public class User {
public virtual string Name { get; set; }
public virtual string Surname { get; set; }
public virtual string Email { get; set; }
public virtual string Password { get; set; }
}
CommentUserDto://视图的可访问类
public class CommentUserDto {
public string Content { get; set; } // from comment
public DateTime CreationTime { get; set; } // from comment
public string PosterName { get; set; } // from user
public string PosterSurname { get; set; } // from user
}
答案 0 :(得分:1)
您不需要执行上述三个选项中的任何一个。如果您有从Comment到User的导航属性,则可以在映射中处理该属性。类似的东西:
Mapper.CreateMap<Comment, CommentUserDto>().ForMember(dest => dest.UserName, opts => opts.MapFrom(src => src.User.UserName));
如果你没有导航属性,那么在初始映射之后,循环遍历dto对象列表并调用相应的_userRepository方法来获取用户信息并以这种方式填充dto对象的相应成员
修改
看到你的模型后,我会做什么(假设导航属性不是一个选项)是这样的:
var comments = _commentRepository.GetAll();
var results = new List<CommentUserDto>();
foreach(Comment comment in comments)
{
var user = _userRepository.Get(comment.userId);
var commentUserDto = new CommentUserDto
{
Content = comment.Content,
CreationTime = comment.CreationTime,
PosterName = user.Name,
PosterSurname = user.Surname
}
results.Add(commentUserDto);
}
return results;