已创建以下 Linq to SQL 事务以尝试创建无间隙的发票编号。假设有 2 个表:
表 1:发票编号。- 列 ID、序列号、增量 - 示例:1、10001、1
表 2:发票。- 列:ID、InvoiceNumber、名称 - 示例:1、10001、“Bob Smith”
Dim db As New Invoices.InvoicesDataContext
Dim lastInvoiceNumber = (From n In db.InvoiceNumbers Order By n.LastSerialNumber Descending
Select n.LastSerialNumber, n.Increment).First
Dim nextInvoiceNumber As Integer = lastInvoiceNumber.LastSerialNumber + lastInvoiceNumber.Increment
Dim newInvoiceNumber = New Invoices.InvoiceNumber With {.LastSerialNumber = nextInvoiceNumber, .Increment = lastInvoiceNumber.Increment}
Dim newInvoice = New Invoices.Invoice With {.InvoiceNumber = nextInvoiceNumber, .Name = "Test" + nextInvoiceNumber.ToString}
db.InvoiceNumbers.InsertOnSubmit(newInvoiceNumber)
db.Invoices.InsertOnSubmit(newInvoice)
db.SubmitChanges()
一切正常,但是否有可能使用这种方法,如果两个用户同时进行交易,他们可能会拿起相同的发票号码?如果是这样,是否有更好的方法使用 Linq to Sql?