我需要使用带有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();
}
}
答案 0 :(得分:3)
对于firebird,您需要通过在连接字符串中添加Enlist = True来明确说明它必须参与。