Обновите коллекцию через выражение lamdada или непосредственно в базе данных с EF 4.1 - PullRequest
1 голос
/ 04 августа 2011

У меня есть коллекция объектов (Счета-фактуры), которые я хочу пометить в базе данных через EF 4.1, над которой я работаю, поэтому никто другой не будет их захватывать и работать с ними.

Вот как ясделай это сегодня.

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

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

  _inputDataRepository.UpdateInvoices(invoicesToBeMarked);

Теперь у меня есть 2 вопроса.Есть ли способ использовать выражение lamda для установки даты обработки вместо цикла, должно быть, но я не могу понять это ...

Когда я сохраняю эту коллекцию в базе данных через EF 4.1.Будет ли он настолько умным, чтобы он мог преобразовать все эти Обновления в 1 следующим образом.

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

Или это будет столько же утверждений UPDATE для SQL, сколько у меня есть счетов в моей коллекции.Если это так, есть ли какой-нибудь способ запустить SQLStatement для базы данных через EF DbContext.

Если это так, то мне не нужно открывать новое соединение и создавать для этого специальный код....

С уважением

1 Ответ

0 голосов
/ 04 августа 2011

foreach - это правильный способ изменения данных.Вы не должны изменять коллекцию или ее элементы в выражении запроса.Помните, что выражения запросов обычно работают с ленивыми перечислителями.

Нет, EF не будет конвертироваться в WHERE ID IN....

Да, вы можете выполнять SQL напрямую.Используйте ObjectContext.ExecuteStoreCommand .

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