Из моего понимания NServiceBus выполняет метод Handle IMessageHandler в транзакции, если исключение распространяется из этого метода, тогда NServiceBus обеспечит отправку сообщения в очередь сообщений (вверх X количество раз до очереди ошибок) и т. Д., Поэтому мы имеем атомную операцию, так сказать.NServiceBus и NHibernate - обработчик и транзакции сообщений
Теперь, когда, если я внутри моего метода Handle NServiceBus Сообщение Я что-то вроде этого
using(var trans = session.BeginTransaction())
{
person.Age = 10;
session.Update<Person>(person);
trans.Commit()
}
using(var trans2 = session.BeginTransaction())
{
person.Age = 20;
session.Update<Person>(person);
// throw new ApplicationException("Oh no");
trans2.Commit()
}
Что такое влияние этого на объем сделки? Действительно ли trans1 считается вложенной транзакцией с точки зрения ее отношений с транзакцией Nservicebus, хотя мы ничего не сделали, чтобы выйти за них замуж? (если нет, как бы связать транзакцию с NServiceBus?
Посмотрите на второй блок (trans2), если я раскомментирую инструкцию throw, выполнит ли транзакция NServiceBus, а затем и rollback trans1? В основных сценариях, скажем, я дамп выше, в консольное приложение, тогда trans1 является независимым, фиксирует, очищается и не откатывается. Я пытаюсь выяснить, что происходит сейчас, когда мы сидим в чьей-то транзакции, такой как NServiceBus?
Выше приведен пример кода, im не будет работать непосредственно с сеансом, больше как с помощью шаблона uow.