私のリポジトリレイヤーは、ViewModelを直接返すために使用されていました。
public IEnumerable<CommentViewModel> GetComments()
{
return from c in context.Comments
select new CommentViewModel
{
FirstName = c.FirstName,
Comment = c.Comment
};
}
次に、リポジトリがビューモデルを返さないようにする必要があることを読んだので、次のように変更しました。
public IEnumerable<Comment> GetComments()
{
return from c in context.Comments;
}
次に、サービスレイヤーで次のように変更しました。
public IEnumerable<CommentViewModel> GetComments(int postId)
{
return _repository.GetComments();
}
に:
public IEnumerable<CommentViewModel> GetComments()
{
var comments = _repository.GetComments();
return Mapper.Map<IEnumerable<Comment>, IEnumerable<CommentViewModel>>(comments);
}
問題は、以前は7ミリ秒かかり、現在は85ミリ秒かかるクエリです。
どこが間違っているのですか?
生成されたクエリは以前は次のとおりでした(上位5つと順序付けはコントローラーで行われます)。
SELECT TOP (5) [t0].[FirstName], [t0].[Comment]
FROM [dbo].[Comment] AS [t0]
ORDER BY [t0].[CreateDate] DESC
現在、すべての列が返されています。
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName],
[Extent1].[DatePosted] AS [DatePosted],
[Extent1].[Comment] AS [Comment],
[Extent1].[IPAddress] AS [IPAddress]
FROM [dbo].[Comment] AS [Extent1]