3

1,000 万レコードのデータベースで多くのレコードを更新したいと考えています。ここでの例は、次のように更新できることを示しています。

Customer c = (from x in dataBase.Customers
             where x.Name == "Test"
             selext x).First();
c.Name = "New Name";
dataBase.SaveChanges();

しかし、これはデータベースへの 2 回のトリップのように見えます。1 つはレコードを取得し、もう 1 つはレコードを保存します。1 回の呼び出しで 1,000 レコードを更新した場合、1,000 レコードをデータベースから WCF サーバーにプルし、変更を加えてから、1,000 レコードを LAN 経由でデータベース サーバーにプッシュする必要があると思います。

昔は、「Update Customers set Name = 'Test' where Year < 1960」は、LAN 経由の 1 つの命令であり、作業はデータベース サーバーで行われていました。

Linq to Entities にこのようなものはありますか?

*ところで: これは私が達成しようとしていることの簡単な例です.実際には何百ものコマンドを発行しています.データベースから WCF にデータを送信して、変更して送り返すだけです!*

4

1 に答える 1

3

あなたが疑ったように。1000のレコードがある場合、この操作に対する1001のデータベース要求が実際に表示されます。ORMは、オブジェクトをメモリにプッシュし、それらを操作してから更新するのに最適です。一括操作には適していません。この場合、最善の策は、ADO.Netを使用してコードを介して更新ステートメントを渡すか、ストアドプロシージャに一括更新コマンドを配置し、そのプロシージャをEFの関数にマップすることです。

于 2012-10-05T13:09:57.027 に答える