2013-05-01 56 views
1

我是從VB6的轉換一些代碼,VB.Net,它包含了一些出現: -如何獲得ObjectContext來編譯?

Private m_myobj As ObjectContext 

m_myobj = GetObjectContext() 
' do stuff, then 
m_myobj.SetAbort() 
' or 
m_myobj.SetComplete() 

通過包括System.DataSystem.Data.EntityImports System.Data.Object參考憑着我設法得到聲明進行編輯,但其他方面迄今爲止都遭到了抵制。顯示的錯誤是: -

'GetObjectContext' is not declared. It may be inaccessible due to its protection level 
'SetComplete' is not a member of 'System.Data.Objects.ObjectContext' 
'SetAbort' is not a member of 'System.Data.Objects.ObjectContext' 

它似乎來自這兩種方法實際上並不文檔存在,但他們(大概)必須已經在VB6工作。有人知道我應該怎麼做嗎?

+0

你打算在COM +容器中運行.Net代碼作爲COM對象嗎? – PatFromCanada 2013-05-01 15:28:07

+0

@PatFromCanada,我打算將代碼作爲桌面項目調用的類庫運行(同一解決方案中的兩個項目)。 – 2013-05-01 15:51:52

回答

2

SetAbortSetComplete方法是調用該COM +代碼的(曾被稱爲MTS)應用程序,它的類是在運行,並允許部分投票決定分佈式數據庫事務是否會由com +環境提交。您將需要查看代碼路徑並查看代碼是否需要。如果是這樣,您將需要調查其他跨多個數據庫訪問擴展數據庫事務的方法。根據我的經驗,人們有時會對這項技術感到興奮,並且不必要地實施它,很可能您只需要消除代碼。

複製此功能的最簡單方法是維護一個打開的連接並適當地調用begintran和endtran,但這種東西往往會變得複雜。

我想最接近現代微軟equivilant是實體框架。

+0

要使ObjectContext引用解決,您需要在VB IDE中使用Project/References添加對COM +服務的引用。 COM +服務DLL是comsvc​​s.dll。 – osullivj 2015-09-15 10:59:21

1

GetObjectContext是一個Windows功能。您可以使用P-其聲明/調用是這樣的:

<DllImport("ComSvcs.dll", CallingConvention:=CallingConvention.Cdecl)> _ 
Public Shared Function GetObjectContext(<Out> ByRef pCtx As IObjectContext) As Integer 
End Function 

<ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("51372AE0-CAE7-11CF-BE81-00AA00A2FA25")> _ 
Public Interface IObjectContext 
    Function CreateInstance(ByVal rclsid As Guid, ByVal riid As Guid) As Object 
    Sub SetComplete() 
    Sub SetAbort() 
    Sub EnableCommit() 
    Sub DisableCommit() 
    <PreserveSig> _ 
    Function IsInTransaction() As Boolean 
    <PreserveSig> _ 
    Function IsSecurityEnabled() As Boolean 
    Function IsCallerInRole(<MarshalAs(UnmanagedType.BStr)> ByVal role As String) As Boolean 
End Interface 
相關問題