Метод DbSet.Find смехотворно медленный по сравнению с.SingleOrDefault для ID

У меня есть следующий код (База данных SQL Server Compact 4.0):

Dim competitor=context.Competitors.Find(id)

Когда я профилирую это, метод Find занимает 300+ мс, чтобы получить конкурента из таблицы всего из 60 записей.

Когда я меняю код на:

Dim competitor=context.Competitors.SingleOrDefault(function(c) c.ID=id)

Тогда конкурент находится всего за 3 мс.

Класс Competitor:

Public Class Competitor
    Implements IEquatable(Of Competitor)

    Public Sub New()
        CompetitionSubscriptions = New List(Of CompetitionSubscription)
        OpponentMeetings = New List(Of Meeting)
        GUID = GUID.NewGuid
    End Sub

    Public Sub New(name As String)
        Me.New()
        Me.Name = name
    End Sub

    'ID'
    Public Property ID As Long
    Public Property GUID As Guid

    'NATIVE PROPERTIES'
    Public Property Name As String

    'NAVIGATION PROPERTIES'
    Public Overridable Property CompetitionSubscriptions As ICollection(Of CompetitionSubscription)
    Public Overridable Property OpponentMeetings As ICollection(Of Meeting)
End Class

Я определил отношения «многие ко многим» для CompetitionSubscriptionsи OpponentMeetings, используя fluent API.

Свойство ID класса Competitorпредставляет собой тип Long, который преобразуется Code First в столбец Identity с первичным ключом в таблице данных (SQL Server Compact 4.0 )

. Что здесь происходит??

34
задан Dabblernl 27 July 2012 в 10:42
поделиться