Что происходит, если метод A вызывает метод B и оба имеют атрибут [Transaction]?

1

У меня есть способ сказать LogErrorA с атрибутом [Транзакция] от Spring.Net, и я хочу вызвать в нем другой метод (скажем, LogErrorB), который также имеет атрибут [Транзакция], потому что мне иногда нужно называть его напрямую. Вызов LogErrorA будет работать под одной транзакцией в Spring.NET или будет создано несколько транзакций?

[Transaction]
public virtual void LogErrorA()

[Transaction]
public virtual void LogErrorB()

И LogErrorA вызывает внутри LogErrorB.

Кроме того, LogErrorB можно вызывать непосредственно несколько раз.

Теги:
spring
attributes

1 ответ

2
Лучший ответ

Существуют некоторые предопределенные методы распространения для транзакций, такие как: Propagation.REQUIRED, Propagation.NEW, Propagation.NESTED и несколько других. Но если вы не определяете какой-либо метод распространения, то это означает, что он требует Propagation.REQUIRED по умолчанию.

Propagation.REQUIRED говорит, что: если какая-либо транзакция не выполняется, она создаст новую транзакцию, и если какая-либо транзакция будет существовать в этой конкретной точке, тогда она будет использовать эту существующую транзакцию.

Поэтому в вашем случае, когда вы вызовете LogErrorB() из LogErrorA(), в этом случае он не будет создавать новую транзакцию, но будет использовать ту же транзакцию, которая была создана в методе LogErrorA().

Если у вас все еще есть сомнения, пожалуйста, дайте мне знать.

Благодаря,

  • 0
    Ваш ответ дал мне отличную информацию. Итак, я буду использовать «[Transaction (TransactionPropagation.Required)]». Но я думаю, что это по умолчанию, поэтому мне больше ничего не нужно делать. Я должен просто оставить атрибуты. Правильно?
  • 0
    Похоже, что это значение по умолчанию для этой страницы: springframework.net/doc-1.1-P3/reference/html/transaction.html . Пожалуйста, дайте мне знать, если я что-то забуду ..
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню