2012-07-02 116 views
0

如果我有一個主表,可以說訂單,項目的子表和項目表都有一個項目編號的字段,但它也有一個可爲空(可選)僅適用於某些項目的顏色字段。我如何使用Entity Framework更新商品表,同時更新訂單表?實體框架,一對多,多列

這是我迄今爲止的代碼示例。兩個問題,我只是進入我的項目之一,並從我的研究表明,我不能添加其他領域的項目表?

foreach (Guid c in AllItems) 
    { Items.OrderItemID = Guid.NewGuid(); 
     ITemsOrderID = order.OrderID; 
     ITems.ItemID = c; 
     If (ItemID = ItemThatLetsYouChoseAColorID) 
     { 
      Items.ItemColorID = ColorID; 
     } else { 
      Items.ItemColorID = null; 
     } 
    } 
    context.Orders.AddObject(Orders); 
    context.Items.AddObject(Items); 
    context.SaveChanges(); 

我的訂單表獲取插入記錄,並且項目獲取插入的一條記錄。恐怕我在這裏錯過了一些基本的東西。順便說一句,這是實體框架4.0,其中。我相信,不需要使用EntityKey。

回答

1

您只需在foreach的範圍之後將對象添加到Items集合中。

你有沒有測試是這樣的:

foreach (Guid c in AllItems) 
{ 
    var Item = new Item(); 

    Item.OrderItemID = Guid.NewGuid(); 
    Item.OrderID = order.OrderID; 
    Item.ItemID = c; 
    If (ItemID = ItemThatLetsYouChoseAColorID) 
    { 
     Item.ItemColorID = ColorID; 
    } 
    else 
    { 
     Item.ItemColorID = null; 
    } 

    context.Items.AddObject(Items); 
} 

context.Orders.AddObject(order); 
context.SaveChanges(); 

而且我不知道要明白你的意思由

我不能在另一個字段添加到項目表

你應該對你實際期望的更精確。插入一行,在表格中添加一列...?什麼是「字段」?

+0

謝謝您的回覆,我想插入一行到訂單,許多行項目。我已經嘗試了上面建議的內容,但它只將最後一項插入到「項目」表中。即AddObject(Item)不是插入每個項目,只是最後一個。 – Jazzy

+0

在重讀您的回覆時,我發現您的第一句話解決了我的問題。因此,你回答了我的問題。 – Jazzy

0

這是工作代碼。我在foreach項目循環外有新的Item,所以覆蓋了這個值。另外,我需要將每個添加到上下文。我的日子不好過這個問題,希望它可以幫助別人:

<-fill the order object-> 
    foreach (Guid i in Items) 
    { 
     **Items item = new Items();** 
     item.ItemID = Guid.NewGuid(); 
     item.OrderID = order.OrderID; 
     if (i == ItemWithColorGuid) 
     { 
      foreach (Guid c in Colors) 
      { 
       **Items color = new Items();** 
       color.ItemsID = Guid.NewGuid(); 
       color.OrderID = order.orderID; 
       color.itemID = g; 
       color.colorID = c; 
       context.item.AddObject(color); 
      } 
     } 
     else 
     { 
      item.ItemID = i; 
      item.ColorID = null; 
      context.item.AddObject(item); 
     }       
    } 
    context.orders.AddObject(order); 
    context.SaveChanges();