0

我有一个在 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 来解决这个问题。

4

1 回答 1

1

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

于 2012-10-04T12:22:02.530 回答