#c# #optimization #entity-framework-4 #linq-to-entities
#c# #оптимизация #entity-framework-4 #linq-to-entities (linq-to-entities)
Вопрос:
Я знаю, что видел это, но я нигде не могу найти это.
У меня есть пара объектов с отношением «многие ко многим»: Person и Department. У человека может быть много отделов и наоборот.
Я думал, что это:
var person = //query user
var d = new Department();
d.Id = 123;
person.Departments.add(d);
Это создает новый отдел в базе данных и связывает их, но это не то, что я хочу. Отдел уже существует. Я просто хочу создать связь. Как я могу сделать это без необходимости запрашивать базу данных для получения экземпляра отдела?
Комментарии:
1. Я думаю, вы хотите выбрать d вместо его создания
Ответ №1:
Попробуйте это:
var department = dbContext.Departments.FirstOrDefault(d => d.Id == 123);
person.Departments.Add(department);
dbContext.SaveChanges();
Это не должно запрашивать базу данных до тех пор, пока не будет вызван dbContext.SaveChanges()
, поскольку используется отложенный запрос. Однако, если это не сработает, вы можете попробовать обновить объект сопоставления напрямую вместо этого:
var departmentMember = new DepartmentMember
{
DepartmentId = 123,
MemberId = person.Id
};
dbContext.DepartmentMembers.Add(departmentMember);
dbContext.SaveChanges();
Ответ №2:
Как насчет:
person.Departments.Add(context.Departments.First(c=>c.Id==123));
Комментарии:
1. Не будет
context.Departments.First(c=>c.Id==123)
запрашивать базу данных?2. о, извините, теперь я понимаю ваш вопрос
3. возможно, вам придется обновить базовые таблицы с помощью необработанной вставки sql? Я не знаю другого способа, но, возможно, кто-то другой сделает