編集: 以下の問題は Entity Framework 6 で修正されました。
以下のコードを実行すると、残念ながら 2 分 10 秒かかります。2 回目の実行には 6.5 分かかります。この質問はこれに関連しています
Private Sub RunTest()
Dim sw As New Stopwatch
sw.Restart()
Using db As New TestDB
db.Configuration.AutoDetectChangesEnabled = False
For n = 1 To 100
For m = 1 To 100
db.Tops.Add(New Top)
Next
Next
db.SaveChanges()
End Using
MsgBox(sw.Elapsed.ToString)
End Sub
エンティティ:
Public Class Top
Public Sub New()
MyBase.New()
One = "arerjlwkerjglwejrglwergoiwerhgiowehrowerlwelfvbwlervbowerghpiweurhgpiwuerviiervljwebbrlvjnepvjnweprvupiweurv"
Two = "w;lrjgwwergkjwervgjwelrgjhwelghlwekglwergiuwehrgwjergjwervgjwerjgnwekrngpwergjpowergllwejrnglkwerngpoierhpiiuewrpjwenrwenrv;lwenrvkjernpgpsrvpi"
End Sub
'ID'
Public Property ID As Integer
'NATIVE PROPERTIES'
Public Overridable Property One As String
Public Overridable Property Two As String
'NAVIGATION PROPERTIES'
End Class
Using ブロックを第 2 レベルのインタラクション内に移動し、そこで SaveChanges を呼び出すと、さらに悪化します。
TestDB は、それ以上の構成なしで DBContext を継承するだけです。Top.ID プロパティのデータベース生成を無効にして、自分で ID を指定すると、パフォーマンスが 30 倍向上します。この問題により、SQL Server Compact でデータベース生成 ID を使用することが不可能になります。クライアント側で生成された ID を使用する以外の解決策はありますか?