2013-05-01 28 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 
相关问题