下面是使用SQL Server CE 3.5 SP1,我尝试使用现有的内部一个新的事务一个很简单的例子。
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()创建了一个又一个)。
上面的想法是,如果子事务随后提交它保持,即使外部事务失败提交。 尽我的理解,这是预期的使用RequiresNew的 。
这MSDN文章称,SQL CE支持嵌套事务正因为如此,所以我的想法是,以上应该是可能的。 是吗? 如果是这样,我怎么修改代码,使这项工作?
编辑 :尽管这个MSDN文章违背了其它MSDN文章,并说嵌套事务不被支持。 也许这是什么问题?