在链接表中多对多插入Entity Framework

时间:2019-03-14 11:28:12

标签: c# entity-framework-6

我有3张桌子

操作员 操作员仓库 仓库

|   Operators   |     |   OperatorsWarehouses  |     |   Warehouses  |
|   OperatorID  |  -  |        OperatorID      |  -  |   WarehouseID |
|   EmployeeID  |     |        WarehouseID     |     |   Warehouse   |

因此,基本上在我的实体框架中,“ OperatorsWarehouses”表没有出现...

“仓库”表中已经有数据,我只需要在Operators和OperatorsWarehouses中插入即可建立关系。

这是我的代码

using (InventoryContext db = new InventoryContext ())
{
   Employee employee = new Employee();
   employee.EmployeeID = Convert.ToInt32(ddlOperators.SelectedValue);

   var operator = new Operator();
   operator.EmployeeID = employee.EmployeeID ;

   db.Operator.Add(operator);
   db.SaveChanges();                       
   ddlOperators.DataBind();
}                    

我已经尝试过

operator.Warehouses.Add(new Warehouse());

但这将要插入到仓库表中,而我不想这样做,我只想在该表上插入运算符

3 个答案:

答案 0 :(得分:2)

您应提供操作员仓库的ID,如果要添加的仓库的ID为0,则将其视为新仓库。 您可以在用户界面中添加操作员后为用户选择的仓库中添加一个下拉列表。

using (InventoryContext db = new InventoryContext ())
 {
   Employee employee = new Employee();
   employee.EmployeeID = Convert.ToInt32(ddlOperators.SelectedValue);
   var wareHouseId = Convert.ToInt32(ddlWarehouses.SelectedValue);
   var operator = new Operator();
   operator.EmployeeID = employee.EmployeeID ;
   operator.Warehouses.add(new Warehouse(){Id=wareHouseId});
   db.Operator.Add(operator);

   db.SaveChanges();                       
   ddlOperators.DataBind();
}         

答案 1 :(得分:1)

在定义表中添加[NotMapped]

类似这样的东西

[NotMapped]
public List<Warehouse> Warehouses;

答案 2 :(得分:1)

当“纯”多对多关系时,实体框架将隐藏关系表。因此,您不会使用 OperatorsWarehouses 表,该表将由EF处理。

要添加关系,您只需将实体添加到实体,即可将操作员添加至仓库,也可以将仓库添加至操作员。

在特定情况下,您需要向操作员添加现有仓库,或向仓库添加现有操作员。像这样:

 int whId = 1; //warehouse with id 1
 db.Warehouses.FirstOrDefault(x => x.WarehouseID ==
 whId ).Operators.Add(operator);

注意:请注意FirstOrDefault,如果没有ID为1的仓库,它将返回null