spring.net中的事务范围

时间:2009-08-12 06:48:59

标签: transactions spring.net

如果我在Spring.Net中使用基于属性的事务,那么看起来像

[Transaction()]
public void MyBusinessMethod()
{
   // doing some in memory calculation, may take some time
   Prepare();

   // actual db access code
   DbAccess();
}

在该方法中,Prepare()将在不涉及数据库层的情况下进行一些准备工作。为获得最佳性能,应在DbAccess()之前打开数据库连接。但是,由于我使用AOP来执行事务并且它在方法级别应用,这是否意味着在调用方法MyBusinessMehtod时将打开连接?如果是,有什么办法可以改善吗?我能想到的一种方法是将DbAccess分解为自己的方法。除此之外,还有其他好的建议吗?

1 个答案:

答案 0 :(得分:0)

一种选择是实现一个简单的“事务范围”类,它明确地开始Spring事务(使用程序化事务管理)。这还允许对事务会话进行额外管理,例如触发验证逻辑等。

另一个(更简单的)选项是重构您的方法,以便从特定于事务的方法调用DbAccess(您可能还将其他事务工作分组)或将属性移动到DbAccess。