我的意思是我有类似
的东西var foosById = context.Foos.ToDictionary(f => f.Id, f => f);
foreach(var foo in foosById)
{
// modify foo.Value, possibly
}
然后我跑了
context.SubmitChanges();
是否反映了变化?它们应该是,因为我的字典是对项目的引用,对吗?
答案 0 :(得分:2)
是的,它应该按预期工作。如果你想要,你可以将context.SubmitChanges();
置于foreach
循环本身。但由于性能不佳,这不是推荐的方法。所以总是尝试把context.SubmitChanges();
放在一边。
但我建议您使用SaveChanges()
代替SubmitChanges()
。
以下是这两种方法的区别。
SaveChanges() - 在交易中运作。如果无法保留任何脏SaveChanges
对象,ObjectStateEntry
将回滚该事务并抛出异常。
SubmitChanges() - 启动一个事务,如果SubmitChanges()
正在执行时发生异常,则会回滚。但是,这不会回滚内存中的更改或DataContext
跟踪的更改。这些更改需要手动回滚。