我有一个对象(发票)的集合,我想在数据库中通过我正在处理的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....)
或者我会在我的集合中拥有与SQL一样多的UPDATE语句。如果是这种情况,有没有办法通过EF DbContext将SQLStatement发送到数据库。
如果是这样,那么我就不必打开新连接并为其创建特定代码......
祝你好运
答案 0 :(得分:0)
foreach
是修改数据的正确方法。您不应该在查询表达式中修改集合或其成员。请记住,查询表达式通常与惰性枚举器一起使用。
不,EF不会转换为WHERE ID IN...
。
是的,您可以直接执行SQL。使用ObjectContext.ExecuteStoreCommand。