我在表格中插入了一个新列HashHash
。然后我需要编写一个小函数,将HashHash
的值设置为Sha1(Row.Hash)
:
public static void UpdateAllHashHashes()
{
using (var db = new MainContext())
{
var q = db.v2Hashes;
foreach (var rec in q)
{
rec.HashHash = GetSha1(rec.Hash);
db.SubmitChanges();
}
}
}
该表有数千条记录。我第一次跑它,花了好几分钟。它在结尾附近引发了一个错误,导致它没有完成,并留下了大约20个未经处理的记录,这是我期待的,所以我再次运行该函数以获得最后工作正常的记录。
第二次传递的原因是如此之快,因为db.SubmitChanges
实际上并没有执行SQL,因为值没有改变?我仍然希望它运行UPDATE
SQL查询。
或者,这是某个数据库引擎优化吗?
答案 0 :(得分:5)
提交更改仅执行实际更改的更改。将值12更新为新值12不是一个变化。
http://msdn.microsoft.com/en-us/library/bb292162(v=vs.110).aspx
所以是的,你的怀疑是正确的。