如果方法A调用方法B并且两者都具有[Transaction]属性,会发生什么?

时间:2014-10-06 08:43:14

标签: c# spring attributes

我有一个方法说LogErrorA带有来自Spring.Net的[Transaction]属性,我想调用其中的另一个方法(比如LogErrorB),它也有[Transaction]属性,因为我有时需要直接调用它。 LogErrorA调用将在Spring.NET中的一个事务下工作,还是会创建多个事务?

[Transaction]
public virtual void LogErrorA()

[Transaction]
public virtual void LogErrorB()

LogErrorA在LogErrorB内调用。

此外,LogErrorB可以直接调用一次。

1 个答案:

答案 0 :(得分:2)

有一些预定义的传播方法,如:Propagation.REQUIRED,Propagation.NEW,Propagation.NESTED等等。但是,如果您没有定义任何传播方法,则默认情况下需要Propagation.REQUIRED

Propagation.REQUIRED说:如果任何事务没有运行,那么它将创建新事务,如果在该特定点存在任何事务,那么它将使用该现有事务。

因此,在您从LogErrorA()调用LogErrorB()的情况下,在这种情况下,它不会创建新事务,但它将使用在LogErrorA()方法中创建的相同事务。

如果您仍有任何疑问,请告诉我。

谢谢,