SQL事务多个类vb.net



使用Visual Studio 2013, VB。. NET w/SQL Server(2008年以后的各种版本)

在我的VB。我已经创建了类来表示我项目中的主要实体-例如,cSalesOrder, cSalesOrderDetail, cPacklist,等等。每个类都包含各种方法来执行基本任务,如保存、更新、加载等。

在我最近的项目中,我必须确保所有进程在保存之前成功,所以我使用SQL事务。我的问题是如何最好地处理跨多个对象的事务,这些对象管理自己的数据处理。

这是我现在正在做的。当我需要启动进程时,我使用如下代码块来创建Connection、Transaction和Command对象:

Using con As New SQLConnection(MyConnectString)
  con.Open
  Using trn As SQLTransaction = trn.BeginTransaction
    Using cmd As New SQLCommand
      cmd.Connection = con
      cmd.Transaction = trn
         <code here>
    End Using
  End Using
End Using
(In the <code here> section I would create my objects and run the process.)

在每个类中,我声明了一个"cmd"对象。例如,在我的cSalesOrder类中有这样一行:

Dim cmd As SQLCommand

然后当我实例化这个类时,我传入我在上面的代码块中创建的cmd对象:

Dim so As New cSalesOrder
so.cmd = cmd
so.Load

然后,我的类中的各种方法使用"cmd"对象来执行它们的任务。

我试过在写之前使用临时数据表来保存我的数据,但我遇到了违反PK的问题。系统的容量可能非常大,在进程完成之前,用户在受影响的表中插入一条新记录是很常见的。

是否有更好的方法来确保我所有的类使用相同的事务?

你可以遵循'singleton'模式来确保所有类只能访问事务的一个静态实例。

如果你有多种类型的事务被完全封装,并且不会在其他事务中创建pk违规,如果它们同时运行,你可以按照单例模式创建多种类型的对象。例如:SalesOrderTransaction, PurchaseOrderTransaction等

vb中的单例模式

最新更新