2012-07-02 115 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();