实体框架:更新连接表

时间:2013-01-19 11:11:47

标签: c# entity-framework orm ado.net

我有以下表格设置:

  • 订单(ID)
  • 产品(ID)[其中ProductID 1和2已存在]
  • OrderProduct (OrderId,ProductID)[订购和产品表的两个键FK'ng]

我试图在订单表中添加记录,将2个产品分配到订单中,如下所示:

var order = new Order();
order.Products.Add(new Product {ID=1});
order.Products.Add(new Product {ID=2});

db.SaveChanges();

问题是:保存订单时,会有两个产品插入到数据库中,而不是引用已存在的产品记录。

请帮忙。感谢。

1 个答案:

答案 0 :(得分:6)

您应该使用db而不是创建新Product,如下例所示:

var order = new Order();
order.Products.Add(db.Products.First(p => p.ID = 1));
order.Products.Add(db.Products.First(p => p.ID = 2));

db.SaveChanges();

或者,您需要在创建产品后“更新参考”。 你可以这样做:

var product = new Product() { ID = 1 };
db.Attach(product);
order.Products.Add(product);