2013-11-30 3 views
0

Короткие и сладкие:Native SQL-запросы в NHibernate транзакции

  1. Должен ли я всегда смывать в SessionScope, прежде чем сделать какой-либо родной запрос SQL в моем приложении?

    Я думаю, что ответ «да», потому что NHibernate реализует кеширование, поэтому, возможно, внесенные изменения все еще не находятся в БД, поэтому запрос будет иметь противоречивые результаты.

  2. Каков правильный способ сделать эти запросы в одной транзакции текущего активного в NHibernate?

    Это важно, потому что я могу получить взаимоблокировки в своей бизнес-логике.

Дополнительная документация по обоим вопросам будет также оценена!

+0

Это должно ответить на ваши вопросы http://stackoverflow.com/a/10657698/1236044 – jbl

ответ

1

(я предположил, что «промывка» вы упоминая ISession.Flush()):

  1. Быстрый ответ: Это зависит от вашего скрытого режима, если это не в коем случае не придется смывать сеансовых себя, но если это Auto, NHibernate будет очищаться до выдачи запроса.
  2. Существует два способа выполнения собственных SQL-запросов с помощью NHibernate. Один из них заключается в использовании собственной поддержки SQL-сервера NHibernate, например, с использованием именованного запроса или ISession.CreateSQLQuery(). Другим является использование NHibernate ITransaction.Enlist(). Однако я не уверен, что выполнение DbCommand с использованием Enlist() приведет к очистке сеанса.
Смежные вопросы