MembershipProvider и кэширование (NHibernate)

#c# #asp.net #nhibernate

#c# #asp.net #nhibernate

Вопрос:

Привет, у меня есть свой собственный поставщик членства, где я открываю NHibernate-сессию в конструкторе:

 public class OwnMembershipProvider : MembershipProvider
{

    protected NHibernate.ISession HibSession;

    public OwnMembershipProvider ()
    {
        HibSession = NHibernateTools.OpenSession();
    }
//...
  

Я выяснил, что если я установлю точку останова в конструкторе, она вызывается только один раз во время запуска приложения. Это вызывает у меня головную боль, поскольку для каждого запроса используется один и тот же NHibernate-Session, что приводит к забавным вещам вроде «о, я не могу изменить свой пароль» (NHibernate-Session возвращает кэшированного пользователя при вызове ValidateUser() , который все еще содержит старый пароль).

Как я могу заставить фреймворк восстанавливать MembershipProvider для каждого отдельного запроса? Или как это должно быть сделано по-другому?

Спасибо за любые подсказки

Ответ №1:

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

Комментарии:

1. да, ну, я тоже пришел к той же идее. Я просто заказываю новый сеанс в ValidateUser() — методе.