- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
哎呀!!!
围绕 SharedDbConnectionScope 和 TransactionScope 对象似乎有点困惑,以便在事务中包装 SubSonic 查询。
文档建议指定 using SharedDbConnectionScope 包裹在 using TransactionScope...
using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
{
using(TransactionScope ts = new TransactionScope())
{
// do something
ts.Complete();
}
}
然后这里还有其他问题,例如 Subsonic: Using SharedDbConnectionScope together with TransactionScope seems to be broken建议文档是错误的,两个对象应该是相反的......
using(TransactionScope ts = new TransactionScope())
{
using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
{
// do something
ts.Complete();
}
}
但是查看源代码我更加困惑。
在 SqlQuery.cs 代码文件中,它有许多 ExecuteTransaction 重载。例如...
public static void ExecuteTransaction(List<SqlQuery> queries)
{
using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
{
using(TransactionScope ts = new TransactionScope())
{
foreach(SqlQuery q in queries)
q.Execute();
}
}
}
嗯...有趣...与文档匹配,但是...ts.Complete() 调用在哪里?
应该如何提交事务?据我所知,它总是会回滚。对于所有 ExecuteTransaction 重载都是相同的!
但这才是真正的关键......
在 TransactionWithDtcOffTests.cs 代码中进行了一些不错的测试,除了它们以其他方式设置了 SharedDbConnectionScope 和 TransactionScope!
using(TransactionScope ts = new TransactionScope())
{
using(SharedDbConnectionScope connScope = new SharedDbConnectionScope())
{
// <snip />
}
}
我还没有机会运行 SubSonic 2.2 的测试,但我想有人已经做过并且他们通过了..
最后...
有人能给我关于 SubSonic2.2 中的事务应该如何设置的明确答案吗?这些文档确实是错误的吗? ExecuteTransaction 重载和测试的源是否与实际正确的方式一致?
最佳答案
SharedConnectionScope (SCS) block 必须位于 TransactionScope (TS) 内。SCS 的目的是在可能的情况下防止将事务升级到 MSDTC,因此将 TS using block 放在 SCS using block 内对我来说没有什么意义。无论如何,每个 TS block 都必须有一个 Complete() 调用才能提交事务。
关于SubSonic2.2 SharedDbConnectionScope 和 TransactionScope 事务混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327871/
哎呀!!! 围绕 SharedDbConnectionScope 和 TransactionScope 对象似乎有点困惑,以便在事务中包装 SubSonic 查询。 文档建议指定 using Shar
使用下面的代码,预期的行为是数据库不会反射(reflect)更新,因为 ts.Complete() 从未被调用,但更新似乎已经完成。但是,如果我省略了 SharedDbConnectionScope,
我是一名优秀的程序员,十分优秀!