【问题标题】:LINQ Insert record to main table and child table using id from main tableLINQ 使用主表中的 id 将记录插入主表和子表
【发布时间】:2013-10-16 18:02:00
【问题描述】:

我有两个表 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 放在哪里,以便完成整个事务,如果任何事情失败,则不会插入任何订单。

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

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

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

【问题讨论】:

  • 你应该将lOrderItems添加到Order.OrderItems,而不是自己设置FK值。
  • 抱歉 Gert,我不清楚你的建议...我已经更新了我的代码块,我得到了所有插入,除了 OrderItems 表中的 LinkedOrderID 始终为 0。
  • Order.OrderItems的属性吗?
  • 如果 LinkedOrderID 被定义为数据库中从 OrderItem 到 Order 的 FK,则 linq-to-sql 设计器应该已创建此属性。如果两者都是新的,则需要使用此属性将 OrderItems 添加到 Order。 Linq-to-sql 将自行设置 FK 值。
  • 查看newOrder 对象的智能感知。

标签: vb.net linq-to-sql


【解决方案1】:

问题已解决...感谢 Gert 提供的帮助。主要问题中显示的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2019-10-28
    相关资源
    最近更新 更多