У меня проблемы с TransactionPropagation.NotSupported. Я полагал, что это распространение приводит к тому, что код выполняется без транзакции. Означает, что, когда я помечен конкретным методом, текущая транзакция будет приостановлена, и код будет выполнен без какой-либо транзакции.Spring.net TransactionPropagation NotSupported
Текущая версия spring.net вместо этого создает новую транзакцию. Смотрите следующий код:
[Test]
public void A() {
TransactionTemplate template = new TransactionTemplate(TransactionManager) {
PropagationBehavior = TransactionPropagation.NotSupported
};
template.Execute(delegate {
Assert.AreEqual(0,
SessionFactory.GetCurrentSession().Linq<XXX>().
Where(t => t.Id.Equals(YYY)).ToList().Count);
return null;
});
}
Я надеялся, что эта запись вызывает то, что LINQ запрос выполняется без транзакции, и он будет бросать новое исключение. Но журнал показал, что он автоматически создает как новый сеанс, так и транзакцию.
Я выяснил эту проблему, когда отмечен какой-либо метод упомянутой аннотацией, и, несмотря на аннотацию, запрос LINQ внутри был правильно выполнен.
Вопрос в следующем: как я могу пометить метод, чтобы он не использовал транзакцию вообще? Я не хочу использовать распространение никогда, поскольку я хочу, чтобы текущая транзакция была приостановлена.
В моем проекте есть поток бизнес-кода, есть обработка транзакций, и я хочу отметить любые части, которые, безусловно, не являются транзакционными.
Журнал Log4net, созданный по моему тесту. NHibernate регистрирует некоторые полезные сведения в области режима DEBUG. Я использую MSSQL. –
Спасибо. Я уже нашел эту проблему, но я не знал, как определить или использовать TransactionScopeOption.Suppress с использованием транзакции spring.net и nhibernate. Я не знаю, куда его вводить, я использую вчерашнюю сборку Spring.net, поэтому Spring.net содержит исправленное поведение. –