Откат транзакции в Firebird и Entity Framework - PullRequest
0 голосов
/ 20 июля 2011

Мне нужно использовать область транзакций с Entity Framework 4 и базу данных Firebird. Я использую провайдер FireBird Entity Framework.

Моя проблема в том, что после вызова SaveChanges для объекта данные сохраняются в базе данных, а не при вызове TransactionsScope.Complete (). Это приводит к тому, что данные никогда не откатываются, даже если исключение происходит внутри блока using (TransactionScope ...).

Это, похоже, проблема с БД FireBird, я тестировал точно такой же код с MS SQL 2008, и RollBack работает правильно.

Что мне нужно сделать, чтобы включить откат с FireBird?

using ( var context = new Model1Container() )
        {
            bool success = false;
            using ( TransactionScope transactionScope = new TransactionScope() )
            {
                PERSON person = new PERSON();
                person.NAME = "test";
                context.AddToPERSON(person);
                context.SaveChanges(SaveOptions.DetectChangesBeforeSave);  
                success = true;
                //transactionScope.Complete(); If this line is not hit, Transaction should Roll Back, but it does not.
            }

            if ( success )
            {
                context.AcceptAllChanges();
            }
        }

1 Ответ

3 голосов
/ 20 июля 2011

Для firebird вам нужно явно сказать, что он должен участвовать, добавив Enlist = True в строку подключения.

...