Я сталкивался с тем, что кажется очень странным поведением при использовании структуры сущностей 4.0.
У меня есть сущность Пользователь, у которой есть Компания (Компания имеет много Пользователей).
ЕслиЯ делаю это, все работает, как и ожидалось, и я получаю замечательного нового пользователя в базе данных:
var company = _model.Companies.First();
company.Users.Add(new User(1, "John", "Smith"));
_model.SaveChanges();
Однако, если я делаю это, то я ничего нового не получаю в базе данных, и никаких исключений не выдается:
var existingUser = _model.Users.First();
var company = existingUser.Company;
company.Users.Add(new User(1, "John", "Smith"));
_model.SaveChanges();
Получается, что если я добавлю в компанию пользователя, который извлечен непосредственно из модели, то все будет работать нормально.Однако, если Пользователь добавлен в Компанию, которая извлекается как свойство навигации другого объекта, он не работает.
Может кто-нибудь сказать мне, является ли это ожидаемым поведением, или если есть что-то, что я могусделать, чтобы это было так, чтобы это было?
Спасибо!
Редактировать
Чтобы уточнить, что я имею в виду под "это не работает";
- При просмотре кода указатель выполнения проходит все строки без исключения.
- Новая строка не добавляется в базу данных
- Если я проверяю company.Users в режиме быстрого просмотра,новый пользователь действительно был добавлен в компанию - он просто не сохраняется в базе данных.
Я немного поиграл, и, похоже, если я сделаю это, я получуисключение:
var existingUser = _model.Users.First();
var company = existingUser.Company;
_model.ObjectStateManager.GetObjectStateEntry(company);
Исключение:
System.InvalidOperationException: ObjectStateManager не содержит ObjectStateEntry со ссылкой на объект типа 'ABC.DEF.Company'.
Doing that для первого (рабочего) сценария возвращает мне ObjectStateEntry без исключения.