插入 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();
}
我有 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();
}