Обновите коллекцию через выражение lamdada или непосредственно в базе данных с помощью EF 4.1
У меня есть коллекция объектов (Счета-фактуры), которые я хочу пометить в базе данных через 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, чтобы установить ProcessingDate вместо цикла, должно быть, но я не могу понять это..
Когда я сохраняю эту коллекцию в базе данных через 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 ответ
foreach
это правильный способ изменить данные. Вы не должны изменять коллекцию или ее элементы в выражении запроса. Помните, что выражения запросов обычно работают с ленивыми перечислителями.
Нет, EF не конвертируется в WHERE ID IN...
,
Да, вы можете выполнить SQL напрямую. Используйте ObjectContext.ExecuteStoreCommand.