Как убедиться, что NHibernate находится внутри транзакции при сохранении, обновлении или удалении? - PullRequest
1 голос
/ 07 мая 2010

Я хотел бы убедиться, что когда я сохраняю какие-либо данные в базе данных, используя Fluent NHibernate , операции выполняются внутри транзакции. Есть ли способ проверить, что транзакция активна через перехватчик? Или какой-либо другой механизм событий?

Точнее говоря, я использую System.Transaction.TransactionScope для управления транзакциями и просто хочу помешать себе не использовать его.

Ответы [ 4 ]

1 голос
/ 07 мая 2010

Я не пробовал это, но я думаю, что вы могли бы создать слушателя, реализующего IFlushEventListener. Что-то вроде:

    public void OnFlush(FlushEvent @event)
    {
        if (!@event.Session.Transaction.IsActive)
        {
            throw new Exception("Flushing session without an active transaction!");
        }
    }

Мне не ясно (и Google не помог), когда именно вызывается OnFlush. Также может быть неявная транзакция, которая может установить IsActive в true.

1 голос
/ 09 мая 2010

Если в вашем коде было одно место для построения сеанса, вы могли бы начать транзакцию там и исправить проблему одним махом.

0 голосов
/ 09 мая 2010

Если вы использовали Spring.Net для обработки транзакций, вы могли бы использовать анонимный внутренний объект, чтобы ваши объекты DAO / ServiceLayer всегда экспонировались с TransactionAdvice вокруг их методов обслуживания. См. пружинную документацию для примера.

0 голосов
/ 07 мая 2010

Для чего? NHProf предупредит вас, если вы не выполняете транзакцию.Как правило, вы должны разрабатывать с этим инструментом в любом случае открытым ...

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