#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()
— методе.