0

我可以在 TransactionScope 中做任何其他事情(与数据库无关)吗?

这会是一个坏习惯吗?

例如

在范围内启动工作流。

除非启动工作流失败,否则我不想保存在数据库中。

如果这是一个不好的做法,那么什么是好的做法?

提前致谢。

using (TransactionScope scope = new TransactionScope())
{
    using (ComponentCM.Audit auditComponent = new ComponentCM.Audit())
    {
        using (AccessCM.Biz dataAccess = new AccessCM.Biz())
        {
            auditComponent.SaveInDB();
            dataAccess.SaveinDB()

            StartWorkflow();
        }
    }
    scope.Complete();
}
4

2 回答 2

3

您希望事务花费尽可能少的时间,因为它们会导致数据库锁定。

对此,最好在事务范围之外做其他工作。

于 2012-09-25T10:28:39.563 回答
1

我同意奥德。

我还要补充一点,scope应该TransactionScope定义在您的工作单元中定义的状态更改。换句话说,作用域内的状态更改应该一起成功或失败,并且通常是同一逻辑操作的一部分。

为了使范围尽可能小,一种常见的模式是乐观并发。使用乐观并发时,您通常只在对状态存储执行写操作时打开事务范围。在这种情况下,您可以例外的是,您正在处理的数据通常不会在您查询和提交之间发生更改(通过另一个操作)。

于 2012-09-25T10:44:30.553 回答