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