最近我遇到了一个有趣的问题。通常我正在使用IIS上托管的.NET Web应用程序并使用MS SQL服务器。
说过我写了一段简单的代码来更新db中的特定记录。该记录应该已经存在,并且不应该在它上面(或者实际上甚至是整个表)进行相当长的操作(没有并发操作应该覆盖更新)。
var record = db.InputDataRecords.Where(i => i.Id == inputDataId).Single();
record.InputData = updatedInputData;
db.SaveChangesAsync();
所以我写了上面的代码,在我的本地机器上测试过,一切都运行得很好,所以我就把它保留原样。
最近代码终于进入了测试服务器(非常慢的吸盘),令我惊讶的是,我从测试人员那里得到了记录没有相应更新的信息。更糟糕的是没有记录任何错误,尽管如果出现问题他们应该加上我还很确定上面的代码没有抛出任何错误,为了和平,我强迫它在执行后记录一些细节(我不能在那台机器上进行调试,所以我无法获得更好的反馈。)
我在这个问题上挣扎了几个小时,在这里和那里做了一些小的调整,但没有什么真的有用。最后切换到同步SaveChanges()
就可以了。
你们有没有人遇到过类似的问题?我很好奇为什么会发生这种情况。