【问题标题】:Using Transaction with ExecuteMethodCall将事务与 ExecuteMethodCall 一起使用
【发布时间】:2012-09-11 09:21:41
【问题描述】:

对...

我有一个项目,由我杰出的前任留给我,其中的一部分似乎最初是使用 LINQ 的特性自动生成的。不幸的是,他并没有真正学习如何正确使用和配置 LINQ,而是似乎已经重命名了所有自动生成的文件,并在他认为适合进行更改的地方将其删除。

我不是为了抱怨(特别是)而提到这一点,而是为了提供上下文,如果建议,例如,在设计器中配置代码的某些方面,则该代码的设计器不再存在,因为它是被撕掉了。

无论如何,我有一个特定的功能,我相信它最初是设计师生成的,内容如下:

<System.Data.Linq.Mapping.DatabaseAttribute(Name:="ProductionControlMS")> _
Partial Public Class Database
Inherits System.Data.Linq.DataContext

<FunctionAttribute(Name:="dbo.ReleaseItemToProduction")> _
Public Function ReleaseBuildPack(<Parameter(Name:="TransitionID", DbType:="Int")> ByVal TransitionID As Integer, _
                                          <Parameter(Name:="SubLevelID", DbType:="Int")> ByVal SubLevelID As Integer, _
                                          <Parameter(Name:="CompNo", DbType:="TinyInt")> ByVal CompNo As Byte) As Integer
    Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod, MethodInfo), TransitionID, SubLevelID, CompNo)
    Return CType(result.ReturnValue, Integer)
End Function

我需要能够将此函数分配到事务中,因为我可能需要回滚它。不幸的是,虽然我可以调用ProductionControlMS.Connection.BeginTransaction,但我看不到如何将事务分配给当前命令。因此,当代码到达Me.ExecuteMethodCall 行时,我会收到 InvalidOperationException,并显示以下消息:

当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery 要求该命令具有事务。该命令的 Transaction 属性尚未初始化。

在这里,为了给它分配一个事务,我可以得到什么来允许我回滚这些操作?

【问题讨论】:

    标签: .net vb.net linq


    【解决方案1】:

    您可以使用TransactionScopes 来控制事务,根本不需要直接挂钩到 LINQ 的 SQLConnection。 (LINQ2SQL 会自动挂钩到 TransactionScope)

    例如:

    Using ts As New TransactionScope()
        new MyDataContext().ReleaseBuildPack(TransitionID, SubLevelID, CompNo )
    
        ' Do whatever else you need to do here under the same transaction
    
        ' If successful, then Complete. 
        ' If no Complete() is called before the ts exits scope then the transaction will be rolled back
        ts.Complete()
    End Using 
    

    【讨论】:

      【解决方案2】:

      您可以从数据上下文中获取更改集并使用更改集数据来还原更改。

      有关此方法的文章可在http://xacc.wordpress.com/2009/02/17/datacontextrevertchanges/ 获得

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-07
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 2013-02-28
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多