2016-06-20 6 views
-2

使用して、SQL Serverのテーブルにリストからオブジェクトを挿入すると私は、LINQのツーSQLを使用してオブジェクトのリストを挿入しようとし、そして最後だけだ方法リストのオブジェクトがデータベースに挿入されます。誰かが問題を見つけるのを助けることができますか?私はプログラミングに新たなんだLINQのツーSQL

これは私のコードです:

//this is the code in the orderDetailRepository class 
public List <OrderDetail> CreateOrderDetailRecords(List <OrderDetail> details) { 
    FruitStoreDataContext db = new FruitStoreDataContext(); 
    db.OrderDetails.InsertAllOnSubmit(details); 
    db.SubmitChanges(); 
    return details; 
} 

//this is the code in the Form.cs file when i press the "finish button" 
private void FinishButton_Click(object sender, EventArgs e) { 
    OrderDetailRepository orderDetailRepo = new OrderDetailRepository(); 
    orderDetailRepo.CreateOrderDetailRecords(Ord); 
    //Ord is the name of the list of OrderDetail Objects that i created... 
    TotalCostLabel.Visible = true; 
    TotalCostLabel.Text = "$" + totalCost; 
} 
+0

動作する必要がある場合 リストの名前です。また、あなたのdatacontextを廃棄しないことによって接続スレッドが漏れていることに注意してください。 –

+0

ですが、最後のorderDetailオブジェクトをdataBaseに挿入するだけです。リストからすべてのオブジェクトを挿入するわけではありません。 –

+0

「Ord」の内容は何ですか? 'CreateOrderDetailRecords'を実行するときに複数のオブジェクトが含まれているかどうかを確認しましたか? –

答えて

0

問題は、あなたがOrderDetailオブジェクトの新しいインスタンスを使用すると、リストに追加するたびにしなかったので、あなたは最近追加された一つだけが挿入されたことがありますdataBaseに... "新しい"キーワードで新しいOrderDetailオブジェクトを作成しなければならず、ボタンをクリックするたびに新しいオブジェクトが作成され、リストに追加されます。 Form.cs.fileで

::これは完全にworkes

public void ButtonClickEvent(object sender, EventArgs e) 
    { 
     orderID = newOrder.OrderID; 
     //Ord is the name of the List... 
     if (Ord.Count == 0) 
     { 

      OrderRepository ordRepo = new OrderRepository(); 
      newOrder = new Order(); 
      newOrder.OrderID = orderID; 
      ordRepo.NewOrder(newOrder); 

     } 

     newDetail= CreateOrderDetails(newOrder, b); 
     Ord.Add(newDetail); 

    private OrderDetail CreateOrderDetails(Order order, Button b) 
    { 
     var prodDict = db.Items.Select(t => new { t.Name, t.ItemID }) 
       .ToDictionary(t => t.Name, t => t.ItemID); 
     var priceDict = db.Items.Select(t => new { t.Name, t.Price }) 
       .ToDictionary(t => t.Name, t => t.Price); 

     OrderDetail ord = new OrderDetail(); 

     ord.OrderID = newOrder.OrderID; 
     ord.ItemID = prodDict[b.Text]; 
     ord.Price = priceDict[b.Text]; 
     ord.Quantity = Convert.ToDecimal(QuantityTextBox.Text); 
     totalCost += ord.Price * ord.Quantity; 

     return ord; 
    } 

これは正しいコードです。

0

またはそれを行うための簡単な方法がある:

公共ボイドButtonClickEvent(オブジェクト送信者、のEventArgs e)は {オーダーID = newOrder.OrderID。 //オードは...(Ord.Count == 0){

 OrderRepository ordRepo = new OrderRepository(); 
     newOrder = new Order(); 
     newOrder.OrderID = orderID; 
     ordRepo.NewOrder(newOrder); 

    } 

Ord.Add(new OrderDetail() { OrderID = newOrder.OrderID, ItemID = prodDict[b.Text], Price = priceDict[b.Text], Quantity = Convert.ToDecimal(QuantityTextBox.Text) }); 
関連する問題