【问题标题】:Turning off Transactions in Entity Framework在实体框架中关闭事务
【发布时间】:2025-12-28 20:30:07
【问题描述】:

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

我们有一个不支持事务的 Informix DB - 是否可以将实体框架与它一起使用?

我们有一个有效的模型和有效的提供者,但我们似乎无法在没有事务启动的情况下执行 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();
    }
}

我们得到的错误如下:

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

我环顾四周,建议使用抑制,但它似乎不起作用......有什么想法吗?

【问题讨论】:

  • 内部异常是什么?
  • “我们有一个不支持事务的 Informix DB”——但 IIRC 甚至 Informix 7 也支持(非嵌套)事务——?我怀疑是否由驱动程序来遵守 supress 标志,因此这可能是 IBM 数据提供程序的错误。

标签: c# entity-framework transactions informix transactionscope


【解决方案1】:

回答您的主要问题(我对 Informix 一无所知)- 您不能禁止交易。如果SaveChanges 没有找到现有事务,它将始终在提供程序上启动一个新事务。在事务中运行SaveChanges是EF的关键特性。

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

【讨论】:

  • 谢谢你,在查看堆栈跟踪后,它似乎总是调用开始事务..:/