如果我将实体项目放入字典并在那里更新,那么当我提交更改时它们会更新吗?

时间:2016-11-18 23:02:55

标签: c# asp.net .net asp.net-mvc entity-framework

我的意思是我有类似

的东西
var foosById = context.Foos.ToDictionary(f => f.Id, f => f);
foreach(var foo in foosById)
{
   // modify foo.Value, possibly
}
然后我跑了

context.SubmitChanges(); 

是否反映了变化?它们应该是,因为我的字典是对项目的引用,对吗?

1 个答案:

答案 0 :(得分:2)

是的,它应该按预期工作。如果你想要,你可以将context.SubmitChanges();置于foreach循环本身。但由于性能不佳,这不是推荐的方法。所以总是尝试把context.SubmitChanges();放在一边。

但我建议您使用SaveChanges()代替SubmitChanges()

以下是这两种方法的区别。

SaveChanges() - 在交易中运作。如果无法保留任何脏SaveChanges对象,ObjectStateEntry将回滚该事务并抛出异常。

SubmitChanges() - 启动一个事务,如果SubmitChanges()正在执行时发生异常,则会回滚。但是,这不会回滚内存中的更改或DataContext跟踪的更改。这些更改需要手动回滚。