Допустим, у нас есть простая схема:
Employee
--------
Id
EmployeeName
Project
-------
Id
ProjectName
EmployeeProject
---------------
EmployeeId
ProjectId
Я помню, что в предыдущей версии EF в модель добавлялась соединительная таблица (или, может быть, она всегда опускалась, и я думаю о таблице с дополнительными столбцами). В EF 6 таблица опущена, и модель выглядит так:
Есть ли способ добавить строки в соединительную таблицу без предварительного запроса к базе данных, чтобы получить соответствующий объект? Например, если я хочу создать новый проект, я могу получить список идентификаторов сотрудников из внешнего интерфейса; Мне пришлось бы запросить базу данных, чтобы получить сотрудников, а затем добавить их в коллекцию сотрудников проекта, а затем снова нажать на базу данных, чтобы сохранить. Есть ли способ сделать это с помощью только одного обращения к базе данных?
Обновить
Вот пример того, что я пытаюсь решить (псевдокод):
CreateProject (string name, List<int> employeeIds)
{
var proj = new Project;
proj.ProjectName = name;
context.Projects.Add(proj);
foreach(var id in employeeIds)
{
// we have the id, but we need to get the actual Employee entity by hitting the database
var employee = context.Employees.First(e => e.Id == id);
proj.Employees.Add(employee);
}
context.SaveChanges();
}
Если бы в модели существовала соединительная таблица, я мог бы просто сделать:
CreateProject (string name, List<int> employeeIds)
{
var proj = new Project;
proj.ProjectName = name;
context.Projects.Add(proj);
foreach(var id in employeeIds)
{
var empProj = new EmployeeProject();
empProj.Project = proj;
// we don't have the Employee entity, but we can set the Id and everything works.
empProj.EmployeeId = id;
context.EmployeeProjects.Add(empProj);
}
context.SaveChanges(); // only need to hit database once, after all entities have been added
}