У меня небольшая проблема с ASP.NET MVC и Entity Framework 4. У меня есть сущность с именем «UF», а другая - с именем «Pais», и у них есть это отношение:
UF [* ... 0..1] Pais
Я могу получить доступ к объекту Pais напрямую из UF, используя свойство навигации:
UF.Pais.Whatever = "foobar";
В настоящее время у меня есть представление, которое вставляет новый элемент в базу данных, и у него есть редактор для "Pais.Codigo" («Codigo» является первичным ключом для Pais).Поэтому, когда я вставляю новую UF, платформа создает экземпляр класса UF со ссылкой на экземпляр класса Pais.Затем это делается:
if (ModelState.IsValid)
{
db.UFs.AddObject(uf);
db.SaveChanges();
return View();
}
Проблема в том, что EF вставляет новый Pais в базу данных, поэтому он в основном игнорирует существующий.
Например, если, скажем, мойОбъект UF имеет Pais с идентификатором 1. Текущее значение uf.Pais.Codigo равно 1. Другие атрибуты, такие как описание, в настоящее время нулевые.Когда я выполняю SaveChanges, оба «uf» и «uf.Pais» находятся в состоянии «Добавлено».Правильное состояние для "uf.Pais" должно быть неизменным, так как оно уже существует в базе данных.
Мой вопрос: есть ли способ изменить отношение по умолчанию EntityState для Не изменено?Следующий код решает проблему, но добавление его в каждую функцию с добавлением новой записи в базу данных (и для каждого FK) является излишним!
db.ObjectStateManager.ChangeObjectState(uf.Pais, EntityState.Unchanged);
Вот и все.Я не уверен, был ли я достаточно ясен.Не стесняйтесь спрашивать больше информации, если это необходимо.И извините за любые английские ошибки!
Спасибо,
Рикардо
PS: "Pais" означает "Страна" и "UF" - "State".