Прежде всего, давайте определим несколько таблиц:
Таблица пользователей будет хранить информацию о пользователе:
Users
- UserID (int, PK)
- ...
UserTasks - это таблица, в которой хранится задача, связанная с пользователем:
UserTasks
- userID (int, FK to Users table)
- taskName (varchar)
Когда я сгенерирую таблицу UserTasks с помощью ADO Entity Framework, я получу класс, который выглядит следующим образом:
UserTasks
- taskName (строка)
- Пользователи (коллекция объектов Users)
Примечание. В таблице UserTasks нет идентификатора пользователя. Итак, давайте теперь предположим, что мне нужно вставить новую пользовательскую задачу ... как мне это сделать? У меня нет доступа к полю userID FK, поэтому мой единственный вариант - выполнить поиск и заполнить объект Users, а затем передать его моему объекту задачи, например так:
//get the user we are interested in
var user = (from u in context.Users
where u.userID == 2
select u).FirstOrDefault();
//create the new task
UserTasks newTask = new UserTasks();
newTask.taskName = "New Task";
newTask.User = user;
Проблема с вышесказанным заключается в том, что я выполняю дополнительный и ненужный вызов базы данных для заполнения моего пользовательского объекта. Можно ли как-то создать новое сопоставление для моего поля userID и при этом сохранить объект User?
Спасибо
- Райан