Вот очень простой пример использования SQL Server CE 3.5 с пакетом обновления 1 (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 () не создает другое).
Идея выше состоит в том, что если субтранзакция фиксируется, то она остается зафиксированной, даже если внешняя транзакция завершается неудачно. Насколько я понимаю, это предполагаемое использование требуетNew .
В этой статье MSDN утверждается, что SQL CE поддерживает вложенные транзакции как таковые, поэтому я думаю, что вышеупомянутое должно быть возможным. Это? Если да, то как мне изменить код, чтобы это работало?
Редактировать : хотя эта статья MSDN противоречит другой статье MSDN и говорит, что вложенные транзакции не поддерживаются. Возможно, в этом проблема?