Как лучше всего устанавливать последние измененные и кто изменял с помощью NHibernate? - PullRequest
5 голосов
/ 05 марта 2010

В моем приложении есть ситуация, когда нам нужно зафиксировать, когда была создана и изменена запись, и какой пользователь выполнил эти действия. Так что у меня может быть объект что-то вроде:

public class Product
{ 
  int Id;
  int Name;
  DateTime CreatedOn;
  int CreatedByUserId;
  DateTime LastModifiedOn;
  int LastModifiedByUserId;
}

Как лучше всего обращаться с ними в NHibernate? С помощью перехватчика что-то вроде того, что описано здесь ?

Ответы [ 2 ]

1 голос
/ 05 марта 2010

Я не думаю, что есть "лучшая" практика, но использование слушателей событий более распространено для этого. Вот хороший пример на http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx

Одна вещь, которую вам нужно учитывать, это то, что вам нужно где-то хранить этот идентификатор пользователя. В настоящее время я делаю это, назначая статическое свойство слушателю при запуске. Это не красиво, но оно выполняет свою работу.

0 голосов
/ 05 марта 2010

Я согласен с Диего, что не думаю, что есть лучшая практика.Это зависит от контекста вашего приложения.В ссылке Диего и для использования прослушивателей событий на уровне постоянства (nHibernate) необходимо знать, как искать текущего пользователя.Это может не иметь смысла в зависимости от вашего приложения.Например, если вы пишете приложение ASP.NET MVC, действительно ли вы хотите, чтобы ваш уровень персистентности зависел от HttpContext, чтобы знать пользователя?Да, вы могли бы передать какую-то стратегию, но это не похоже на то, что это всегда будет правильным решением.

Я думаю, что вполне допустимо, чтобы ваш сервисный уровень создал объект и добавилсам создатель.Затем передайте весь объект, когда создатель уже увлажнен, до nHibernate для сохранения.Создатель будет сохранен в базе данных так же, как и любое другое свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...