我可以在DataBase中做任何其他的事情(与TransactionScope无关)吗?
这会不会是一种糟糕的做法?
e.g
在范围内启动工作流。
除非启动工作流失败,否则我不想保存在DB中。
如果练习不好,什么是好练习?
提前谢谢。
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();
}发布于 2012-09-25 10:28:39
您希望事务花费尽可能少的时间,因为它们可能导致对数据库的锁定。
在这方面,最好在事务范围之外进行其他工作。
发布于 2012-09-25 10:44:30
我同意奥德的观点。
我还要补充的是,scope of TransactionScope应该定义在工作单元中定义的状态更改。换句话说,范围内的状态更改应该全部成功或一起失败,并且通常是同一逻辑操作的一部分。
为了保持尽可能小的范围,一种常见的模式是乐观并发。使用乐观并发时,通常只在对状态存储执行写操作时打开事务范围。在这种情况下,您将例外,通常您正在处理的数据在查询和提交之间不会更改(通过另一个操作)。
https://stackoverflow.com/questions/12580917
复制相似问题