none
Транзакции в связке EF Code First + SQL CE RRS feed

  • Вопрос

  • Доброго времени суток!

    Недавно перешел от ObjectContext к DbContext. Теперь возникла такая ситуация, что работавший до этого код перестал работать. Привожу код:

    db.Database.Connection.Open(); // (1)
    using (var transaction = db.Database.Connection.BeginTransaction()) { // (2)
        // Какие-то действия (3)
        db.SaveChanges();
        transaction.Commit(); // (4)
    }
    После перехода понадобилось добавить строку (1), т.к. соединение всегда находится в состоянии Closed, и поэтому невозможно было выполнить строку (2). Однако, когда дело доходит до (4) соединение оказывается закрытым, более того, оно может закрыться уже на стадии выполнения (3) и соответственно на (4) выбрасывается исключение: 
    Cannot access a disposed object.
    Object name: 'SqlCeTransaction'.

    В связи с этим вопрос: Каким образом можно использовать транзакции в связке .Net Framework 4 + EF Code First + SQL Compact 4.0?

    17 апреля 2013 г. 4:31

Ответы

Все ответы

  • Стандартная схема в Code First такая:

    using(var transactionScope = new TransactionScope(TransactionScopeOption.Required,
        new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
    {
        //Ваши действия.
        context.SaveChanges();
        transactionScope.Complete();
    }

    18 апреля 2013 г. 6:08
    Модератор
  • Я пробовал использовать TransactionScope. С ним такая же ситуация. Как я говорил, соединение закрывается во время выполнения (// Ваши действия), а потом, если где-то после этого происходит попытка доступа к context, т.е. какой-либо запрос в БД, то выбрасывается исключение:

    Объект соединения не может быть включен в область действия транзакции.


    18 апреля 2013 г. 7:35
  • В общем, нашел решение здесь же. Только вот хотелось бы узнать, хорошо ли так делать, использовать Connection  от ObjectContext?

     
    18 апреля 2013 г. 11:26