質問: だから、私はDBContextを持って、私は次の操作をしています: ``` dbContext.SomeTables1.Add(object1) dbContext.SomeTables2.AddRange(objectArray2) dbContext.SomeTables3.AddRange(objectArray3) dbContext.SaveChanges(); ``` EFは、この順序でdbレコードを挿入せず、ランダムな順序で挿入します。それらを同じ順序で挿入するには、追加する`dbContext.SaveChanges()`を実行する必要があります。これは効率的な解決策ではなく、私の場合は、すべての挿入を行うのに10秒かかりますが、1回の保存でランダムな順序は約3秒かかります。 NBデッドロックの問題を解決するには正しい順序が必要です。 私の質問は次のとおりです: > * この問題はEF7で解決されていますか? > * 私はEFをプロファイリングしてランダムな順序を決定することができますが、同じランダムな順序で一貫しているか、要求ごとに変化するという保証はありますか? (私はこの質問に対する答えが肯定的であれば私の他のコードを採用することができます)。 > * すべての追加で`dbContext.SaveChanges()`よりも順序を維持する良い方法はありますか? >
回答: * EF6またはEF7で保存オーダーを指定する方法はありません。 * これは問題ではないため、EF7では問題は解決されません。 * 前任者が同じであれば注文は同じになります(まれに起こることはほとんどありません) SaveChangesを呼び出すと、すべてのエンティティがメソッド "ProduceDynamicCommands"の内部順序から順序付けされます。次に、 "TryTopologicalSort"メソッドによって再度ソートされます。これにより、先行するものが残っていないコマンドが追加されます(AとBを追加し、 Bの場合は、Aが挿入される前にBが挿入されます) あなたはバッチ追加で挿入されます。 挿入を実行するのに3秒かかるので、何千ものエンティティがあると仮定し、一括挿入を実行するとパフォーマンスが向上し、10秒からそれ以下、さらには最初の3秒を短縮できます。 私が推薦できる2つの図書館はここにあります: * + **無料です**が、すべての種類の関連性や継承性で動作しません * + **支払う**が、すべてをサポートする **免責事項** :私はEntity Framework Extensionsプロジェクトのオーナーです。