Вставьте в таблицу ссылок многие ко многим в Entity Framework - PullRequest
4 голосов
/ 14 марта 2019

У меня есть 3 таблицы

Оператор OperatorWarehouse Warehouse

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

Так что в принципе в моей структуре сущностей таблица "OperatorsWarehouses" не отображается ...

Естьуже данные в таблице Warehouses, мне нужно только вставить в Operators and 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 ]

2 голосов
/ 14 марта 2019

Вы должны предоставить идентификатор для хранилища оператора, если добавляемый вами склад имеет 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 голос
/ 14 марта 2019

Платформа сущностей будет скрывать таблицу отношений, когда это «чистые» отношения «многие ко многим».Таким образом, вы не будете видеть таблицу OperatorsWarehouses , она будет обрабатываться EF.

Чтобы добавить отношения, вы просто добавляете объекты к объектам, так что вы можете добавить оператора к складу или добавить склад к оператору.

В вашем конкретном случае вам потребуетсядобавьте существующий склад к оператору или существующий оператор к складу.Примерно так:

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

примечание: будьте осторожны с FirstOrDefault, который вернет ноль, если нет хранилища с идентификатором 1

1 голос
/ 14 марта 2019

Добавьте [NotMapped] в таблицу определений:

Примерно так

[NotMapped]
public List<Warehouse> Warehouses;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...