使用lambda表达式更新集合或使用EF 4.1直接在数据库中更新

时间:2011-08-04 12:30:57

标签: lambda entity-framework-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....)

或者我会在我的集合中拥有与SQL一样多的UPDATE语句。如果是这种情况,有没有办法通过EF DbContext将SQLStatement发送到数据库。

如果是这样,那么我就不必打开新连接并为其创建特定代码......

祝你好运

1 个答案:

答案 0 :(得分:0)

foreach是修改数据的正确方法。您不应该在查询表达式中修改集合或其成员。请记住,查询表达式通常与惰性枚举器一起使用。

不,EF不会转换为WHERE ID IN...

是的,您可以直接执行SQL。使用ObjectContext.ExecuteStoreCommand