下面是一个使用SQL Server CE 3.5 SP1的简单示例,我尝试在现有的事务中使用新的事务。SQL Server Compact(CE)是否支持另一个RequiresNew事务作用域?
using (var db = new MyDataContext(<connection string>))
using (var ts = new TransactionScope())
{
db.Thing.InsertOnSubmit(new Thing());
db.SubmitChanges();
using (var ts2 = new TransactionScope(TransactionScopeOption.RequiresNew))
{
db.Thing.InsertOnSubmit(new Thing());
db.SubmitChanges(); // exception here
ts2.Complete();
}
[... do more stuff ...]
ts.Complete();
}
这会导致错误“连接对象不能在事务范围内注册”。在第二次调用“db.SubmitChanges()”
指出SQL CE不支持一个事务内的两个连接,但我只有一个在这里(除非SubmitChanges()创建另一个连接)。
上面的想法是,如果子事务提交,那么即使外部事务失败,它仍然保持提交。据我所知,这是the intended use of RequiresNew。
This MSDN article声称SQL CE支持嵌套事务,因此我认为上述应该是可能的。是吗?如果是这样,我该如何修改代码才能使其工作?
编辑:虽然this MSDN article与另一个MSDN文章相矛盾,并且说嵌套事务不受支持。也许这就是问题所在?