Несколько SubmitChanges и откат транзакции с использованием Linq To SQL - PullRequest
10 голосов
/ 28 октября 2009

Я использую TransactionScope для отправки данных в Linq в SQL. У меня вопрос: если я использую несколько SubmitChanges в одной и той же области, все ли области будут откатываться в случае ошибки или только изменений, внесенных после последнего SubmitChanges? Например:

using (TransactionScope trans = new TransactionScope())
{
    using (dbDataContext db = new dbDataContext())
    {
        try
        {
            //do some insert
            db.SubmitChanges();

            //do some updates
            db.SubmitChanges();

            trans.Complete();
        }
        catch(Exception ex){}
    }
}

Если обновление SubmitChanges выдает исключение, будет ли откат SubmitChanges также откатиться?

1 Ответ

8 голосов
/ 28 октября 2009

Откатится ВСЕ изменения, а не только одно из последних SubmitChanges ().

Вам часто нужно будет использовать этот шаблон, когда у вас есть данные, которые зависят от других данных - например, если вам нужно создать объект и получить его автоматически сгенерированный идентификатор, чтобы сделать что-то еще (хотя L2SQL поддерживает это с одним SubmitChanges вызывают в большинстве сценариев, просто создавая объект, но я отвлекся ...).

...