У меня есть способ сказать LogErrorA с атрибутом [Транзакция] от Spring.Net, и я хочу вызвать в нем другой метод (скажем, LogErrorB), который также имеет атрибут [Транзакция], потому что мне иногда нужно называть его напрямую. Вызов LogErrorA будет работать под одной транзакцией в Spring.NET или будет создано несколько транзакций?
[Transaction]
public virtual void LogErrorA()
[Transaction]
public virtual void LogErrorB()
И LogErrorA вызывает внутри LogErrorB.
Кроме того, LogErrorB можно вызывать непосредственно несколько раз.
Существуют некоторые предопределенные методы распространения для транзакций, такие как: Propagation.REQUIRED, Propagation.NEW, Propagation.NESTED и несколько других. Но если вы не определяете какой-либо метод распространения, то это означает, что он требует Propagation.REQUIRED
по умолчанию.
Propagation.REQUIRED говорит, что: если какая-либо транзакция не выполняется, она создаст новую транзакцию, и если какая-либо транзакция будет существовать в этой конкретной точке, тогда она будет использовать эту существующую транзакцию.
Поэтому в вашем случае, когда вы вызовете LogErrorB() из LogErrorA(), в этом случае он не будет создавать новую транзакцию, но будет использовать ту же транзакцию, которая была создана в методе LogErrorA().
Если у вас все еще есть сомнения, пожалуйста, дайте мне знать.
Благодаря,