0

TblO​​rders と TblOrderItems の 2 つのテーブルがあります。TblO​​rders には、自動付番フィールドである主キー フィールドがあります。TblO​​rders にレコードを挿入し、その 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」で競合が発生しました。ステートメントは終了されました。

解決済み: 正しい解決策でコード ブロックを更新しました。

4

1 に答える 1

0

問題は解決しました...提供されたヘルプについてGertに感謝します。主な質問に表示される回答。

于 2013-10-16T10:02:00.470 に答える