EF: Избегать нескольких операторов обновления - PullRequest
4 голосов
/ 05 августа 2011

Код такой:

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();

Заканчивается выдача множества операторов SQL, таких как

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

Есть ли способ дать EF (Code First) команду следующего утверждения:

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

Или я должен изучить использование одного из доступных методов SQLQuery, или отдельного инструмента, такого как Dapper, массового или ...?

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

В настоящее время нет способа выполнять массовые обновления в 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 голосов
/ 06 августа 2011

Самый простой ответ для этого - написать этот запрос и использовать DbContext.SQLQuery() для его запуска.Как уже упоминалось, в самом EF нет способа сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...