Как мне переопределить уровень изоляции по умолчанию при использовании атрибута транзакции в Spring.Net

#nhibernate #spring.net #isolation-level #spring-transactions

#nhibernate #spring.net #уровень изоляции #spring-транзакции

Вопрос:

При использовании атрибута Transaction() в методе уровень изоляции по умолчанию устанавливается на чтение. Что я хочу сделать, так это установить уровень изоляции по умолчанию на ReadUncommitted весной.Конфигурация сети (чтобы не изменять все определения атрибутов транзакции, которые существуют в настоящее время)

Как мне это сделать? Можно ли это сделать с помощью Spring.NET 1.2 ?

Я пытался следовать документации, используя tx: advice и т. Д., Но безрезультатно.

Я даже перешел к коду Spring с помощью Reflector, но все, что я, кажется, понимаю из этого, это то, что Spring просто считывает настройки из объявления атрибута в методе.

Можно ли это сделать или мне придется пройти через код и изменить атрибут там, где это необходимо?

Ответ №1:

Обычно я использую, например:

 [Transaction( IsolationLevel.ReadUncommitted )]
  

в моих методах репозитория. И это работает в сочетании с <tx:attribute-driven transaction-manager="HibernateTransactionManager"/> .

 <object
  name="HibernateTransactionManager"
  type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate32"
  dependency-check="none">
  <property name="DbProvider" ref="MsSqlDbProvider"/>
  <property name="SessionFactory" ref="SessionFactory"/>
</object>
  

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

1. Спасибо, Андреас, но я на самом деле пытаюсь понять, могу ли я избежать этого, установив в файле конфигурации значение по умолчанию (для всех методов) IsolationLevel.ReadUncommitted, все еще используя [Transaction()] . Я подозреваю, что это невозможно, хотя:-(

Ответ №2:

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

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

1. Если я найду время, я попытаюсь это закодировать, но, вероятно, это будет не скоро.