Вопрос только в том, чтобы откатить изменения, а не фиксировать.
Допустим, я получаю некоторые данные, меняю их, отправляю изменения (необязательный шаг) и откатываю транзакцию. Куда бы вы ни посмотрели, каждый автор пишет, что отменяет изменения.
Но я обнаружил, что это наполовину правда - LINQ DataContext сохранит измененные данные! Я проверил это, используя TransactionScope и DataContext.Transaction. В обоих случаях у меня одинаковое поведение.
Обходным путем будет воссоздание DataContext после отката (однако это приводит к другим проблемам, таким как кеширование данных и обработка вложенных транзакций) или ручное отклонение изменений в DataContext. Тем не менее, это всего лишь обходные пути.
Вопросы
Так чего мне не хватает? LINQ to SQL не подходит для транзакций? Как использовать транзакции, чтобы они ДЕЙСТВИТЕЛЬНО откатывали изменения?
Пример
MyTable record = null;
db.Connection.Open();
using (db.Transaction = db.Connection.BeginTransaction())
{
record = db.MyTable.First();
record.BoolField = !record.BoolField; // changed
db.SubmitChanges();
db.Transaction.Rollback();
}