我得到了一个服务组件,看起来像这样(不是我写的):
[Transaction(TransactionOption.Required, Isolation = TransactionIsolationLevel.Serializable, Timeout = 120), EventTrackingEnabled(true)]
public class SomeComponent : ServicedComponent
{
public void DoSomething()
{
try
{
//some db operation
}
catch (Exception err)
{
ContextUtil.SetAbort();
throw;
}
}真的需要ContextUtil.SetAbort()吗?当组件离开时,异常不会中止事务吗?
发布于 2012-10-18 20:24:20
仅当您想要手动管理事务时。
如果您以这种方式使用[AutoComplete]属性修饰您的操作,您的组件将自动投票决定中止(在引发任何异常的情况下)或提交:
[AutoComplete]
public void DoSomething()编辑:
有关此属性的更多信息,请参见MSDN here
如果方法调用正常返回,则
事务自动调用SetComplete。如果方法调用抛出异常,事务将中止。
无论如何,如果你(在极少数情况下)真的需要手动管理事务,那么不要让你的事务有疑问是非常重要的。我在代码中遗漏了应该显式调用的ContextUtil.SetComplete();。
https://stackoverflow.com/questions/12954440
复制相似问题