TblOrders と TblOrderItems の 2 つのテーブルがあります。TblOrders には、自動付番フィールドである主キー フィールドがあります。TblOrders にレコードを挿入し、その Order の OrderID を使用して、いくつかのレコードを TblOrderItems に挿入する必要があります。
したがって、TblOrders には次のフィールド OrderID、Customer、DelAddress、OrderDate があり、TblOrderItems には次のフィールド ItemID (PK 自動番号)、LinkedOrderID (このアイテムが属する TblOrders からの OrderID)、ItemName、ItemQty、ItemPrice があります。
次のコードがあります...
Dim db as New OrdersDataContext
Dim newOrder as New Order With {.Customer = "CustomerA", _
.DelAddress = "Delivery Address", _
.OrderDate = Now()}
db.Orders.InsertOnSubmit(newOrder)
'Removed as I now have a FK relationship
'Dim ID as Integer = newOrder.OrderID
If lstBox_Items.Count > 0 Then
For i = 0 to lstBox_Items.Count - 1
Dim newOrdersItem as New OrderItem With {.LinkedOrderID = newOrder.OrderID, _
.ItemName = lstBox_Items.Items.Item(i).Text, _
.ItemPrice = lstBox_Items.Items.Item(i).Value,_
.ItemQty = lstBox_Items.Items.Item(i).Attributes("Qty")}
db.OrderItems.InsertOnSubmit(newOrderItem)
Next
End If
db.SubmitChanges
これは私が苦労している場所です... db.InsertOnSubmit() と db.SubmitChanges をどこに配置して、トランザクション全体が完了し、何かが失敗した場合に注文が挿入されないようにする必要があります。
更新: 挿入コマンドと送信コマンドでコード ブロックを更新しました。子テーブル OrderItems へのすべての挿入が、ORDER テーブルに新しく挿入されたレコードの OrderID ではなく 0 の LinkedOrderID 値を持っていることを除いて、コードは正常に機能しているようです。
更新 2: OrderItems.LinkedOrderID と Order.OrderID の間に FK 関係を追加しましたが、挿入しようとするとエラーが発生します... INSERT ステートメントが FOREIGN KEY 制約と競合しました。"FK_TblOrderItems_TblOrders". データベース「MMD」、テーブル「dbo.TblOrders」、列「OrderID」で競合が発生しました。ステートメントは終了されました。
解決済み: 正しい解決策でコード ブロックを更新しました。