【问题标题】:Entity Framework, SqlCommand and TransactionScope实体框架、SqlCommand 和 TransactionScope
【发布时间】:2012-09-25 09:40:13
【问题描述】:

我有一个在 EF 4.3 Code First (EF) 中完成的存储库,以及另一个使用常规 SqlCommand (SQLCMD) 的存储库。 EF 将连接对象传递给 SQLCMD,因此两者都使用相同的连接。

在 EF 中,我创建了一个实体,并使用实体 ID 与 SQLCMD 进行其他操作。当然实体必须存在,否则我会收到 FK 错误。它运行良好,但我需要将这两个操作保留在同一个事务中,因此如果出现问题,两者都会回滚。

如果我将两者包装在同一个 TransactionScope 中它不起作用,SQLCMD 看不到由 EF 创建的实体。但是,如果我删除 TransactionScope,它会再次起作用。错误总是一样的,一个关于错误 FK 的 SQL 错误。

我已尝试在我的计算机中启用 MSDTC,但仍然无法正常工作。虽然这应该不是问题,因为两者都使用相同的连接。

我注意到,EF在使用后关闭了连接,所以当SQLCMD得到它时,它必须再次打开它。会不会是这个问题?

这是 Windows 7 x64 Ultimate 和 SqlServer 2008。

有什么问题?谢谢!

编辑:

显然问题是我在 SQLCMD 中使用任务。它不是一个,它是一个连续的链,我不知道如何使用 TransactionDependantClone 来解决这个问题。

【问题讨论】:

    标签: entity-framework task-parallel-library transactionscope entity-framework-4.3 sqlcommand


    【解决方案1】:

    只有在您运行 EF 查询时关闭连接时,EF 才会关闭连接。如果您首先手动打开连接(例如,通过将打开的连接传递给上下文),则 EF 不会关闭它。因此,您可以这样做并防止 EF 关闭连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多