我已將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 –