2010-11-02 147 views
2

我有.net3.5 C#应用程序。在托管代码和非托管代码之间共享数据库事务

应用程序使用EntityFramework作为其数据库接口。

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

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

我该怎么做?我可以与dll共享同一个数据库连接吗?我可以与dll共享交易吗?

感谢,

玛坦

回答

0

实体框架,你可以提供自己的SqlConnection实例。然后,您可以使用此实例与之开始交易。这使您可以控制数据库连接,这是一个开始。

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

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

+0

您确定没有办法共享数据库连接吗? – Mattan 2010-11-07 07:56:20

+0

是的。问题是托管连接不仅仅是包装一个非托管的MSSQL连接库:它是一个完全托管的实现。这意味着没有“原始非托管句柄”。这意味着你正在使用两个完全分离的实现:托管和非托管。因此,您必须选择一个并通过该连接路由所有命令。因为我无法想象实体框架与非托管版本的包装一起工作,所以我会尝试按照答案中所述的其他方式。 – 2010-11-07 07:58:44