Я просмотрел способ регистрации имени пользователя текущего пользователя в таблице сущности ревизии Envers. Тем не менее, информации мало, и информация, которую мне удалось найти, была не такой полезной.Как зарегистрировать текущего пользователя с NHibernate Envers
У меня есть пересмотр сущность и слушатель, который выглядит следующим образом:
[RevisionEntity(typeof(EnversRevisionListener))]
public class EnversRevisionEntity : DefaultRevisionEntity
{
public virtual string UserName { get; set; }
}
public class EnversRevisionListener : IRevisionListener
{
private string _userName = "unknown";
public EnversRevisionListener(string userName)
: base()
{
_userName = userName;
}
public void NewRevision(object revisionEntity)
{
var casted = revisionEntity as EnversRevisionEntity;
if (casted != null)
{
casted.UserName = _userName;
}
}
}
Я хочу использовать эти два в среде ASP.NET. Завод конфигурации и сеансов создается один раз, поскольку это дорогостоящее действие. Для каждой транзакции открывается новый сеанс.
Из этого NHE Jira вопрос, связанный с этим, SO question Я понимаю, что при настройке nHibernate можно зарегистрировать имя пользователя при прослушивании.
Однако, это не очень хорошо для меня, так как это будет регистрировать имя пользователя для всех, кто подключается к приложению, для каждой транзакции.
Мне нужно указать имя пользователя, связанное с конкретной транзакцией слушателю.
Раньше я использовал аудит бедных людей, используя прослушиватели событий до и после обновления nHibernate. Здесь I faced a similar problem, поскольку эти слушатели также связаны с заводом, а не с сеансом. Поэтому я переключился на перехватчики старого стиля, которые могут быть связаны с сеансом внутри OpenSession
. Это позволило мне добавить текущего пользователя к перехватчику.
Однако, я не знаю, как решить ту же проблему для Envers. Я надеюсь, что кто-то может помочь.
Есть ли разница между 'HttpContext.Current.User' en' Thread.CurrentPrincipal' в моем случае? – Pieter
Я думаю, что нет, но HttpContext.User строго связан с окружением http. Thread.CurrentPrincipal более общий и будет работать с приложением win форм, а также – Novakov
Я думаю, что вы правы, согласно этому сообщению, и поскольку я не изменяю ни одно значение вручную: http://www.hanselman.com/blog/ SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx – Pieter