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