автоматическое управление транзакциями с текстовыми данными - PullRequest
3 голосов
/ 18 февраля 2011

Я предполагал, что при использовании DataContext следующим образом я получу автоматический откат:

ОБНОВЛЕНИЕ Я на самом деле дважды звонил SubmitChanges, но вопрос по-прежнему актуален.

public void UpdateUser(User user)
    {
        using (var context = new UserDataContext())
        {
            //update stuff.
            context.SubmitChanges();

            //update stuff.
            context.SubmitChanges();
        }
    }

Когда что-то идет не так, отката нет.

Вместо этого для обеспечения отката я реализовал следующее:

public void UpdateUser(User user)
    {
        var context = new UserDataContext();
        try
        {
            context.Connection.Open();
            context.Transaction = context.Connection.BeginTransaction();

            //update stuff.
            context.SubmitChanges();
            context.Transaction.Commit();
        }
        catch (Exception e)
        {
            context.Transaction.Rollback();
            throw;
        }
        finally
        {
            context.Dispose();
        }
    }

что на много больше сантехники, чем я хочу. Есть ли лучший способ указать DataContext, что вы хотите автоматический откат?

1 Ответ

4 голосов
/ 18 февраля 2011

Если не внутри внешней транзакции (например, TransactionScope), SubmitChanges запускает транзакцию для вас и должна автоматически откатываться, если возникает исключение.

Предложите опубликовать реальный код, вызывающий проблему, ивозникает исключение.

Если вы выполняете несколько SubmitChanges и хотите, чтобы они были атомарными, оберните в TransactionScope:

using (TransactionScope ts = new TransactionScope())
{
    blah1.SubmitChanges()

    blah2.SubmitChanges();

    ts.Commit();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...