В связи с различными вопросами, заданными здесь и другими форумами, я пришел к выводу, что понятия не имею, что я делаю, когда речь идет о объектах контекста сгенерированных объектов в Entity Framework.
В качестве фона у меня много опыта с использованием LLBLGen Pro, а для Entity Framework мне около трех недель.
Предположим, что у меня есть контекст, называемый "myContext". В моей модели есть таблица/объект под названием Employee, поэтому теперь у меня есть myContext.Employees. Я предполагаю, что это означает, что это свойство представляет собой набор сущностей Employee в моем контексте. Однако я ошибаюсь, поскольку я могу добавить новый объект в контекст с помощью:
myContext.Employees.AddObject(new Employee());
и этот новый объект Employee не отображается в myContext.Employees. Из того, что я собираю, единственный способ найти этот добавленный объект - это отслеживать его, скрываясь в myContext.ObjectStateManager. Это звучит для меня как набор myContext.Employees - это фактически не набор сущностей Employee в контексте, а скорее какое-то представление сущностей Employee, которые существуют в базе данных.
Чтобы добавить к этой путанице, скажем, я смотрю на отдельную сущность сотрудника. Существует объект проекта, который имеет отношения M: 1 с Employee (у сотрудника может быть несколько проектов). Если я хочу добавить новый проект к конкретному сотруднику, я просто делаю:
myEmployee.Projects.Add(new Project());
Отлично, это фактически добавляет проект в коллекцию, как я ожидал. Но это летит прямо перед тем, как работают свойства ObjectSet вне контекста. Если я добавлю новый проект в контекст с помощью:
myContext.Projects.AddObject(new Project());
это не изменяет набор проектов.
Я был бы очень признателен, если бы кто-то объяснил мне это. Кроме того, мне действительно нужна коллекция всех сотрудников (или проектов) в контексте, и я хочу, чтобы она была доступна как свойство контекста. Возможно ли это с помощью EF?