2010-11-02 148 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