0

我在我的 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)
    };
}

我怎样才能使这项工作?

我发现的一些可能的想法:

  1. 创建 _commentUserRepository
  2. 使用 include 以某种方式加入两个表(我正在使用 EF)
  3. 在我的域层中创建一个负责组合逻辑的管理器。

编辑:

评论型号:

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
}
4

1 回答 1

1

您不需要执行您提到的三个选项中的任何一个。如果您有从评论到用户的导航属性,您可以在映射中处理它。就像是:

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;
于 2015-09-18T12:47:35.590 回答