0

データベースにすでに存在するかどうかわからないエンティティのグループがあります。それらが存在する場合-私はそれらを更新する必要があります-それらが存在しない場合-私はそれらを追加する必要があります(エンティティごとにそれはどちらかである可能性があり、それらは10000個あります...)

(シナリオ-ファイルからデータをインポートしています。同じファイルをインポートした場合、ファイルが変更されても何も起こりません-更新する必要があります)。

追加する前に各エンティティを検索しなくても、Entity Frameworkを使用してそれを実現できますか?

(追加したい場合-AddObjectを使用する必要があり、変更したい場合-attachとChangeObjectStateを使用する必要があります)。

検索を回避する方法はありますか?2つのオプションのいずれかを実行するよりも?

(「追加または更新」の方法を探しています...)

ありがとう。

4

2 に答える 2

1

DbContext API(EF4.3およびEF5)を使用できる場合は、AddOrUpdateメソッドを使用できます。移行を有効にすると、このメソッドの使用法を示すサンプルコードが表示されます。または、EFチームからのこの古いブログ投稿で例を確認できます。

http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-beta-1-automatic-migrations-walkthrough.aspx

于 2012-04-09T20:28:21.733 に答える
1

いいえ。EFでは、エンティティを挿入または更新するかどうかを知っている必要があります=>わからない場合は、最初にデータベースを検索する必要があります。EFを使用せずにSQLを直接使用することで複雑さを軽減できますが、挿入または更新を決定する前にエンティティを検索する必要があります。直接SQLの場合、この全体を単一のデータベースラウンドトリップで実行できます(SQL Server 2008は特別なコマンドMERGEthisを提供します)が、EFは検索用に個別のラウンドトリップを必要とし、更新または挿入用に個別のラウンドトリップを必要とします。

編集:パフォーマンスが向上する別の解決策は、すべてのデータをデータベースにすばやくフェッチすることです。たとえば、テーブル値パラメーターまたは一括挿入を使用してストアドプロシージャで埋められた一時テーブルです。ある処理テーブルにすべてのレコードができたら、SQLを使用して、実際のテーブルに存在するすべてのレコードを更新し、存在しないすべてのレコードを挿入できます。

于 2012-04-09T16:29:46.863 に答える