Через различные вопросы, которые я задавал здесь и на других форумах, я пришел к выводу, что понятия не имею, что я делаю, когда дело доходит до созданных объектов контекста сущности в 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, существующих в базе данных.
Чтобы еще больше усилить эту путаницу, скажем, я смотрю на одного сотрудника. Существует объект Project, который имеет отношение M: 1 с Employee (сотрудник может иметь несколько проектов). Если я хочу добавить новый проект для конкретного сотрудника, я просто делаю:
myEmployee.Projects.Add(new Project());
Отлично, это фактически добавляет Проект в коллекцию, как я и ожидал. Но это идет вразрез с тем, как работают свойства ObjectSet вне контекста. Если я добавлю новый проект в контекст с:
myContext.Projects.AddObject(new Project());
это не меняет набор проектов.
Я был бы очень признателен, если бы кто-то объяснил мне это. Кроме того, мне действительно нужна коллекция всех сотрудников (или проектов) в контексте, и я хочу, чтобы она была доступна как свойство контекста. Возможно ли это с EF?