下面是一個使用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文章相矛盾,並且說嵌套事務不受支持。也許這就是問題所在?