【发布时间】:2013-10-16 18:02:00
【问题描述】:
我有两个表 TblOrders 和 TblOrderItems。 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 的 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