我有訂單&訂單詳細信息實體的OrderID作爲外鍵在訂單明細表中。 OrderID是Order的標識列,並設置爲自動生成。LINQ to sql -error在插入2時引發父子關係
當我做一個插入如下(爲簡單起見硬編碼值):
LINQ1DataContext db = new LINQ1DataContext();
Order order = new Order();
order.OrdersCustomerID = 1;
order.OrdersDate = time;
db.Orders.InsertOnSubmit(order);
OrdersDetail oDetail = new OrdersDetail();
oDetail.OrdersDetailID = order.OrdersID;
oDetail.OrdersDetailProdID = 1;
oDetail.OrdersDetailQty = 6;
oDetail.OrdersDetailUnitPrice = 2.58m;
db.OrdersDetail.InsertOnSubmit(oDetail);
db.SubmitChanges();
這將導致一個錯誤「與外鍵約束衝突」。 我發現這是因爲在InsertOnSubmit(order)時沒有生成orderID。當SubmitChanges()然後運行時,OrdersDetailID不匹配OrdersID並獲取錯誤。 OrderID只會在'submitchanges()'後生成。
如果放在一個額外的db.SubmitChanges();在db.Orders.InsertOnSubmit(order)之後,orderid按照我期望的和orderDetails的方式自動生成,然後插入正確。
我的問題是,當插入到像這樣的2個表(父 - 子)時,必須在每個insertOnSubmit之後放入submitChanges是否正常?
我認爲insertOnSubmit的想法是我可以在不同的表上執行一些插入操作,LINQ to SQL將會處理SubmitChanges之後的所有細節。
感謝,
做一個提交中間變化是錯誤的信息。相反,他自己找到了正確的解決方案,即讓框架自己連接外鍵。如果您只是通過連接屬性將詳細記錄添加到父記錄中,如order.OrdersDetails.Add(oDetail)(而不是InsertOnSubmit(oDetail)),並且不要在子項中設置外鍵,那麼它將更新自動只有一個提交。 – 2014-06-25 21:57:47