我正在使用NHibernate
事件监听器在数据库中生成事件日志,我正在使用HttpContext.CurrentUser
获取当前用户ID并将其写入数据库字段。
SessionFactory实例是singleton,事件监听器也根据文档,所以我想知道是否有可能的情况,当当前用户已经改变时,事件监听器将调用HttpContext.CurrentUser,这意味着在事件中将记录用户与变化无关?
如果从不同的线程产生更改,如果事件处理时HttpContext可能不为null并且错误的用户将被写入事件表,该怎么办?
答案 0 :(得分:2)
Httpcontext是线程安全的,因此不存在http上下文会为该实例意外更改的情况。它依赖于线程上下文来返回特定用户的正确数据。
答案 1 :(得分:0)
我做了类似的事情,但我检查确保HttpContext.CurrentUser不为null。如果在另一个dll中定义eventlistener,则前端可以是Web应用程序或本地exe或用于单元测试目的。在这种情况下,HttpContext.CurrentUser将为null。
if (HttpContext.Current != null)
return HttpContext.Current.User.Identity.Name;
return WindowsIdentity.GetCurrent().Name;