在实体框架中插入多对多的链接表

我有 3 张桌子


Operator OperatorWarehouse 仓库


|   Operators   |     |   OperatorsWarehouses  |     |   Warehouses  |

|   OperatorID  |  -  |        OperatorID      |  -  |   WarehouseID |

|   EmployeeID  |     |        WarehouseID     |     |   Warehouse   |

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


Warehouses 表中已经有数据了,我只需要插入 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());

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


大话西游666
浏览 174回答 3
3回答

慕哥9229398

您应该为 Operator 的 Warehouse 提供 Id,如果您添加的 Warehouse 的 id 为 0,则它被认为是一个新的 Warehouse。您可以在 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();}         

炎炎设计

添加[NotMapped]您的定义表:像这样的东西[NotMapped] public&nbsp;List<Warehouse>&nbsp;Warehouses;

30秒到达战场

当它是“纯”多对多关系时,实体框架将隐藏关系表。所以你不会看到OperatorsWarehouses表,它将由 EF 处理。要添加关系,您只需将实体添加到实体,因此您可以将操作员添加到仓库,也可以将仓库添加到操作员。在您的特定情况下,您需要将现有仓库添加到操作员,或将现有操作员添加到仓库。像这样的东西:&nbsp;int whId = 1; //warehouse with id 1&nbsp;db.Warehouses.FirstOrDefault(x => x.WarehouseID ==&nbsp;whId ).Operators.Add(operator);注意:注意 FirstOrDefault 如果没有 id 为 1 的仓库,它将返回 null
打开App,查看更多内容
随时随地看视频慕课网APP