2011-08-04 9 views
1

私が作業しているEF 4.1を通じてデータベースにマークしたいオブジェクト(請求書)のコレクションを持っていますので、それらの上に。lamdada式を使用してコレクションを更新するか、EF 4.1のデータベースで直接入力

これは私が今日行う方法です。

ICollection<Invoice> affectedInvoices = _inputDataRepository.GetNewInvoices(); 

    DateTime processingTime = DateTime.Now 
    foreach (Invoice invoice in affectedInvoices) 
     invoice.ProcessingDate = ProcessingTime 

    _inputDataRepository.UpdateInvoices(invoicesToBeMarked); 

今私は2つの質問があります。ループの代わりにProcessingDateを設定するためのラムダ式を使用する方法はありますか?それはわかりません。

このコレクションをEF 4.1を通してデータベースに保存すると、それはとてもスマートなので、このようなすべてのアップデートをこのように1に変換できますか?

UPDATE [Invoices] SET ProcessingDate = '2011-08-05 12:00:00' WHERE ID IN (1,2,3,4....) 

これは、私のコレクションに請求書があるのと同じくらい多くのUPDATEステートメントからSQLになります。そうであれば、EF DbContextを介してデータベースにSQLStatementを呼び出す方法がいくつかあります。

その後、私は新しい接続を開き、そのための具体的なコードを作成する必要はありません場合厥場合...

敬具

答えて

0

foreachは、データを変更する正しい方法です。クエリ式では、コレクションまたはそのメンバを変更しないでください。覚えておいてください。クエリ式は通常、遅延型の列挙子で動作します。

いいえ、EFはWHERE ID IN...に変換されません。

はい、SQLを直接実行できます。 ObjectContext.ExecuteStoreCommandを使用してください。

関連する問題