2010-12-05 27 views
3

我有訂單&訂單詳細信息實體的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之後的所有細節。

感謝,

回答

0
LINQ1DataContext db = new LINQ1DataContext(); 

Order order = new Order(); 
order.OrdersCustomerID = 1; 
order.OrdersDate = time; 
db.Orders.InsertOnSubmit(order); 

> db.SubmitChanges(); 

OrdersDetail oDetail = new OrdersDetail(); 
oDetail.OrdersDetailID = order.OrdersID; 
oDetail.OrdersDetailProdID = 1; 
oDetail.OrdersDetailQty = 6; 
oDetail.OrdersDetailUnitPrice = 2.58m; 
db.OrdersDetail.InsertOnSubmit(oDetail); 

db.SubmitChanges(); 
+0

做一個提交中間變化是錯誤的信息。相反,他自己找到了正確的解決方案,即讓框架自己連接外鍵。如果您只是通過連接屬性將詳細記錄添加到父記錄中,如order.OrdersDetails.Add(oDetail)(而不是InsertOnSubmit(oDetail)),並且不要在子項中設置外鍵,那麼它將更新自動只有一個提交。 – 2014-06-25 21:57:47

3

db.OrdersDetail.InsertOnSubmit(oDetail); 

添加

order.OrdersDetail.Add(oDetail); 

似乎工作,只需要一個db.SubmitChanges()。也許這就是做這種事情的方式..