【发布时间】: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