在托管代码和非托管代码之间共享数据库事务

时间:2010-11-02 12:01:20

标签: c# c++ visual-studio-2008 oracle entity-framework

我有.net3.5 C#应用程序。

该应用程序使用EntityFramework作为其DB接口。

此应用程序调用c ++非托管dll,它也使用DB。这个DLL更新了数据库。

我希望能够回滚。我希望此操作包括主应用程序所做的更改以及dll所做的更改。

我该怎么办?我可以与dll共享相同的数据库连接吗?我可以与dll共享交易吗?

谢谢,

玛坦

1 个答案:

答案 0 :(得分:0)

使用实体框架,您可以提供自己的SqlConnection实例。然后,您可以使用此实例启动事务。这使您可以控制数据库连接,这是一个开始。

关于非托管代码,我建议您允许DLL中的入口点进入托管代码,以允许它在此SqlConnection上执行SQL。

由于SqlConnection类完全用托管代码编写,因此无法将实际连接句柄传递给非托管代码,并允许普通的非托管函数使用此连接。因为您以实体框架为起点,所以需要SqlConnection,因此让DLL将SQL语句发送到托管连接可能是唯一的方法。