LINQ使用主表中的id将记录插入主表和子表

时间:2013-10-09 10:21:13

标签: vb.net linq-to-sql

我有两个表TblOrders和TblOrderItems。 TblO​​rders具有主键字段,该字段是自动编号字段。 我需要在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以便整个事务完成,如果有任何失败,那么就不会插入任何订单。

更新: 我现在使用insert和submit命令更新了我的代码块。代码似乎工作正常,除了所有插入子表OrderItems的LinkedOrderID值为0而不是ORDER表中新插入记录的OrderID。

更新2: 我现在在OrderItems.LinkedOrderID和Order.OrderID之间添加了一个FK关系,但现在当我尝试插入时出现错误... INSERT语句与FOREIGN KEY约束冲突。 “FK_TblOrderItems_TblOrders”。冲突发生在数据库“MMD”,表“dbo.TblOrders”,列'OrderID'中。声明已经终止。

已解决: 使用正确的解决方案更新了代码块。

1 个答案:

答案 0 :(得分:0)

问题解决了......感谢Get for help。答案显示在主要问题中。