次のコードがあります (データベースは SQL Server Compact 4.0 です):
Dim competitor=context.Competitors.Find(id)
これをプロファイリングすると、Find メソッドはわずか 60 レコードのテーブルから競合他社を取得するのに 300 ミリ秒以上かかります。
コードを次のように変更すると:
Dim competitor=context.Competitors.SingleOrDefault(function(c) c.ID=id)
その後、競合他社はわずか 3 ミリ秒で見つかります。
競争者クラス:
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
流暢な API を使用しCompetitionSubscriptions
て多対多の関係を定義しました。OpponentMeetings
クラスの ID プロパティはCompetitor
Long であり、Code First によってデータテーブルの主キーを持つ Identity 列に変換されます (SQL Server Compact 4.0)
ここで何が起こっているのですか??