2011-08-05 12 views
4
このような

コード:EF:回避複数の更新文

var compIds = from p in packinglist.List 
       select p.ComponentId; 
var components = from c in context.Components 
       where compIds.Contains(c.Id) 
       select c; 
foreach (var item in components) 
{ 
    item.CurrentSiteId = packinglist.DestinationId; 
} 
context.SaveChanges(); 

update [dbo].[Components] set [CurrentSiteId] = @0 where ([Id] = @1) 

のようなSQL文をたくさん出して終わるEF(コードファースト)を指示する方法はありますが、以下を発行しますステートメント:

update [dbo].[Components] set [CurrentSiteId] = @0 where ([Id] in (....)) 

また、利用可能なSQLQueryメソッドの1つ、または別のツールliかっこいいか巨大か...?

+4

私も答えに興味がありますが、EFに関する私の経験に基づいて、これはSQLクエリまたはストアドプロシージャ(EFにインポートできる)の候補に似ています。 – Tridus

+0

@ Tridus:直接SQLを使用する方法がないため、回答として投稿する必要があります。 –

答えて

2

現在、EF 4で一括更新を実行する方法はありません。非常に長く、複雑な作業の中にSQLを生成するものがあります。ストアドプロシージャまたはT-SQLを使用することをお勧めします。ここで私は過去に使用した迅速なT-SQLの抜粋です:

using (var context = new YourEntities()) 
{ 
    context.ExecuteStoreCommand(
        @"UPDATE Components SET CurrentSiteId = 1 WHERE ID IN(1,2,3,4)"); 
} 
0

このための最も簡単な答えはそのクエリを記述し、それを実行するためにDbContext.SQLQuery()を使用するだけです。前述のように、EF自体でこれを行う方法はありません。

関連する問題