0

SCQL CE 4.0 データベースを持つアプリケーションを開発しており、その ORM として EF 4.3.1 を使用しました。XML ファイルから 100 レコードをロードし、データベースに対して (GUID 列で) チェックし、それらが新しい場合は挿入する必要がありますが、それらの一部が既に存在する場合は、それらのレコードを更新する必要があります。

今、私はこの要件への最良のアプローチは何だろうと思っていますか?

今のところ、次のコードを使用していますが、効率的ではないと思います。

foreach( var record in xmlRecords )
{
    var existingRecord = context.Records.SingleOrDefault(r => r.Guid == record.Guid);
    if( existingRecord == null )
        context.Records.Add(record);
    else
        context.Records.ApplyCurrentValues(record);
 }

 context.SaveChanges();                
4

2 に答える 2

0

これは問題ありません。もう 1 つは、ストアド プロシージャに XML を入力として取り、XML を使用して挿入および更新コマンドを記述させることですが、SQL CE は XML データ型をサポートしていません。

于 2012-12-27T10:49:10.023 に答える
0

今のところ、次のコードを使用していますが、効率的ではないと思います。

あなたが持っているもののように聞こえます。100 件のレコードを処理してテストを実行しましたか? これをさらに最適化したい理由はありますか?あなたのコードが 100 レコードの処理を合理的に処理でき (この場合、1 秒または 2 秒未満であることが合理的だと思います)、それが要件である場合は、完了です。エンティティ フレームワークであり、他のすべての ORM は 100 行の更新を簡単に処理できると思います。将来、より多くのレコードを処理する必要があるのではないかと心配している場合は、適切な数のレコードを含む大きなテスト ファイルを作成し、それがどのように機能するかを確認してください。そこから最適化します。

壊れた場合は直さないでください。コードが負荷を処理できなくなるまで最適化しないでください。ユーザーは 1.1 秒と 1.1222 秒の違いを見分けることができなくなります。

何かを最適化する必要がある場合は、窓の外で何が遅くなっているかについての仮定を投げかけます。それはあなたが期待するものではありません。コードにいくつかのタイマー ステートメントを挿入して、何が速度を低下させているかを確認します。

それが役立つことを願っています。

于 2012-12-27T18:12:59.127 に答える