Firebird和实体框架事务回滚

时间:2011-07-20 10:57:53

标签: entity-framework transactions firebird rollback

我需要使用带有Entity Framework 4的事务范围和Firebird数据库。我正在使用FireBird实体框架提供程序。

我的问题是,一旦在对象上调用了SaveChanges,数据就会持久存储到数据库,而不是在调用transactionScope.Complete()时。这导致数据永远不会回滚,即使在使用(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 个答案:

答案 0 :(得分:3)

对于firebird,您需要通过在连接字符串中添加Enlist = True来明确说明它必须参与。