我已将MvcMiniProfiler连接到我的应用程序,它报告重复查询。如何追踪由MiniProfiler识别的重复Linq到SQL查询?
我设置一个断点在我的仓库
Public Function Read() As System.Linq.IQueryable(Of [Event]) Implements IEventRepository.Read
Dim events = (From e In dc.Events
Select e)
Return events.AsQueryable ''# BREAKPOINT HERE
End Function
,我已经打了有问题的网页。
我的代码,通过我的服务层打Read()
功能两次(这是由设计,因为我无法弄清楚如何降低话费)
Dim eventcount = EventService.GetHotEventCount() ''# First Hit
Dim eventlist = EventService.GetHotEvents((page - 1) * 5) ''# Second Hit
Dim model As EventsIndexViewModel = New EventsIndexViewModel(eventlist, page, eventcount)
Return View("Index", model)
的EventService
做一个简单的查询反对IQueryable的Read
Public Function GetHotEvents(ByVal skip As Integer) As List(Of Domain.Event) Implements IEventService.GetHotEvents
Return _EventRepository.Read() _
.Where(Function(e) e.EventDate >= Date.Today AndAlso
e.Region.Name = RegionName) _
.OrderByDescending(Function(e) (((e.TotalVotes) * 2) + e.Comments.Count)) _
.ThenBy(Function(e) e.EventDate) _
.Skip(skip) _
.Take(5) _
.ToList()
End Function
不幸的是我无法弄清楚,为什么MiniProfiler是说有8级重复的查询(13总共)。
修订
所以看起来好像山姆说,我不是预加载我的查询中我的关系。
如何适当地预加载Linq to SQL中的关系?任何人都可以借用任何建议吗?
编辑
这里是正在创建的ViewModel。
Public Class EventsIndexViewModel
Public Property Events As List(Of Domain.ViewModels.EventPreviewViewModel)
Public Property PageNumber As Integer
Public Property TotalEvents As Integer
Public Property MapEventsList As List(Of Domain.Pocos.MapPin)
Public Property JsonMapEventsList As String
Sub New()
End Sub
Sub New(ByVal eventlist As List(Of Domain.Event), ByVal page As Integer, ByVal eventcount As Integer)
_PageNumber = page
__TotalEvents = eventcount
Dim mel As New List(Of MapPin)
_Events = New List(Of Domain.ViewModels.EventPreviewViewModel)
For Each e In eventlist
_Events.Add(New Domain.ViewModels.EventPreviewViewModel(e))
mel.Add(New MapPin(e.Location.Latitude, e.Location.Longitude, e.Title, e.Location.Name, e.Location.Address))
Next
_MapEventsList = mel
_JsonMapEventsList = (New JavaScriptSerializer()).Serialize(mel)
End Sub
End Class
编辑 - 添加截图
迷你探查显示了一个堆栈跟踪的各种处决,照顾到包括查询时间线的屏幕快照? –
我已添加查询...我无法找到堆栈跟踪 –
这是经典的n + 1东西,您的查询中的关系未被预加载,特别是.Comments和.Locations –