关闭实体框架中的事务

Stu*_*nar 5 c# informix entity-framework transactions transactionscope

我们正在尝试实现一个快速原型来证明实体框架可以实现某些功能......

我们有一个不支持事务的Informix数据库 - 是否可以使用实体框架?

我们有一个工作模型和工作提供者,但似乎我们不能在没有交易的情况下执行CRUD查询 - 我们甚至试图压制它们......

[Test]
public void TestMethod1()
{
    entities ent = new entities();

    var a = ent.brands.Select(x => x);

    using (TransactionScope trans = new TransactionScope(
                                          TransactionScopeOption.Suppress))
    {
         ent.brands.AddObject(new brand() { br_name = "New Test Brand" });
         ent.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

我们得到的错误如下:

在提供程序连接上启动事务时发生错误.有关详细信息,请参阅内部异常

我环顾四周,最近建议是使用抑制,但它似乎没有用......任何想法?

Lad*_*nka 3

回答你的主要问题(我对 Informix 一无所知)——你不能抑制事务。如果SaveChanges没有找到现有的交易,它总是会在提供者上启动一个新的交易。在事务中运行是 EF 的关键特性SaveChanges

顺便提一句。我检查了IBM Data Provider,发现仅支持 EFv1,因此 EFv4 和 EFv4.1 的功能不必工作(除非有较新版本的提供程序)。