插入 link table 多对多 Entity Framework

Insert in the link table many to many in Entity Framework

我有 3 table

运算符 运营商仓库 仓库

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

所以基本上在我的 entity framework "OperatorsWarehouses" table 中没有出现...

Warehousestable中已经有数据了,我只需要在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());

但是那将插入到仓库中 table 我不想那样做,我只想在那个 table

上插入运算符

在您的定义中添加 [NotMapped] table :

像这样

[NotMapped]
public List<Warehouse> Warehouses;

Entity framework 将隐藏关系 table 当它是 "pure" 多对多关系时。因此,您不会看到 OperatorsWarehouses table,它将由 EF 处理。

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

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

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

注意:注意 FirstOrDefault,如果没有 id 为 1

的仓库,它将 return 为 null

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

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();
}