我有一个稍微修改过的AccountController,它应该在登录时将一行写入表。
但是,页面在数据库操作完成之前会重定向,因此不会插入任何内容。
我暂时通过坚持使用Thread.Sleep来解决这个问题,但我正在寻找一种让它看起来无缝的替代方案。
If Not String.IsNullOrEmpty(returnUrl) Then
Return Redirect(returnUrl)
Else
Dim db As New GlobalSecModelDataContext
Dim logAdmin = New secAdminLog
logAdmin.EmployeeNumber = userName
logAdmin.What = "Logged in"
logAdmin.DateLogged = DateTime.Now
logAdmin.UserIP = Request.ServerVariables("REMOTE_ADDR")
logAdmin.NetworkUser = Request.ServerVariables("REMOTE_USER")
db.secAdminLogs.InsertOnSubmit(logAdmin)
db.SubmitChanges()
Session("LoggedInUser") = StrConv(userName, VbStrConv.ProperCase)
Threading.Thread.Sleep(5000)
Return Redirect("/Home")
End If
是否有更好的解决方案可以让使用该系统的用户更快或以最佳方式使用Threading.Thread.Sleep(5000)
?
我发现Threading.Thread.Sleep(5000)
并不完美,因为数据库事务并不总是在那时完成。
任何建议都会有所帮助。提前谢谢。
答案 0 :(得分:1)
尝试将InsertOnSubmit和SubmitChanges包装到事务中,并在重定向之前提交。我有很多非常相似的代码,并没有看到这个问题。默认情况下,SubmitChanges()会同步运行,直到SQL执行后才会返回。