2010-12-05 17 views
3

は私がオーダー&注文が注文の詳細テーブルの外部キーとして受注コードを持つエンティティの詳細を持っています。 OrderIDはOrderのID列で、自動生成に設定されています。LINQ to SQLは-error 2 entitesに挿入親と子の関係

(簡単にするためにハードコードされた値)を以下のように私は挿入を行います

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(); 

これはエラー「FOREIGN KEY制約と競合」になります。 これは、注文IDがInsertOnSubmit(order)で生成されていないためです。 SubmitChanges()が実行されると、OrdersDetailIDはOrdersIDと一致せず、エラーが発生します。 OrderIDは 'submitchanges()'の後に生成されます。

余分なdb.SubmitChanges(); db.Orders.InsertOnSubmit(order)の後、orderidは私が期待したとおりに自動生成され、orderDetailsはそれを正常に挿入します。

私の質問は、それはこのように2つのテーブル(親子)に挿入する際に、すべてのinsertOnSubmit後でSubmitChangesに入れて持って正常ですか?

私はinsertOnSubmitの考えは、私は異なるテーブルにいくつかの挿入を行うことができ、LINQ to SQLはSubmitChangesに続くすべての詳細を調べると考えました。

db.OrdersDetail.InsertOnSubmit(oDetail); 

order.OrdersDetail.Add(oDetail); 

を追加

おかげで、

答えて

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

途中でサブミッドレンジを行うのは間違ったメッセージです。代わりに、彼自身が適切な解決策を見つけました。これは、フレームワークが自分自身で外部キーをフックアップさせることでした。もしあなたが単にinsertOnSubmit(oDetail)の代わりにorder.OrdersDetails.Add(oDetail)のような接続プロパティを使って親レコードに詳細レコードを追加し、その子レコードに外部キーを全く設定しなければ、自動的に1つだけ提出します。 –

3

)が(動作するように見え、唯一のdb.SubmitChangesを必要としていました。多分このタイプのことをする方法です。