Скажем, у меня есть две сущности с примерно 20 свойствами на одну сущность и отношение «многие ко многим», например:
User (Id int,Name string, .......)
Issue (Id int,Name string, .......)
IssueAssignment (UserId,RoleId)
Я хочу создать новую проблему и назначить ее нескольким существующим пользователям.,Если у меня есть такой код:
foreach(var userId in existingUserIds)
{
int id = userId
var user = _db.Users.First(r => r.Id == id);
issue.AssignedUsers.add(user);
}
_db.Users.AddObject(user);
_db.SaveChanges();
, я заметил, что он кажется ужасно неэффективным, когда я запускаю его для своей базы данных SQL.Если я смотрю на SQL Profiler, он делает следующее:
- SELECT TOP (1) * ОТ пользователя, ГДЕ UserId = userId
- SELECT * FROM IssueAssignment ON User.Id = userId
- INSERT INTO User ....
- INSERT INTO IssueAssignment
Мои вопросы:
(a) почему (1) и (2) имеютслучиться вообще?
(b) Оба (1) и (2) возвращают все поля. Нужно ли мне делать проекцию объекта, чтобы ограничить поля, тоже кажется ненужной работой.
Спасибо за помощь