Поскольку я не могу комментировать ответ, я сделаю это с помощью нового ответа ..
Я заметил, что ваш атрибут называется «FirstName», вы случайно не пытались сделать этот учебник?
И это действие редактирования, с которым у вас проблемы?
Потому что это та же самая проблема, которая возникает у меня и двух моих одноклассников.
Вот более подробное объяснение проблемы:
Это действие контроллера:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Contact contactToEdit) {
if (!ModelState.IsValid)
return View();
try {
var originalContact = (from c in base._entities.ContactSet
where c.Id == contactToEdit.Id
select c).First();
base._entities.ApplyPropertyChanges(originalContact.EntityKey.EntitySetName, contactToEdit);
base._entities.SaveChanges();
return RedirectToAction("Index");
} catch(Exception e) {
return View();
}
}
При вызове ApplyPropertyChanges возникает исключение . (InvalidOperationException)
Сообщение об исключении:
{System.InvalidOperationException: ObjectStateManager не содержит ObjectStateEntry со ссылкой на объект типа «ContactManager.Models.Contact».
в System.Data.Objects.ObjectContext.ApplyPropertyChanges (String entitySetName, Объект изменен)
в ContactManager.Controllers.HomeController.Edit (Contact contactToEdit) в C: \ Users \ Jeroen \ Desktop \ ContactManager \ ContactManager \ ContactManager \ Controllers \ HomeController.cs: строка 65}
Когда я добавляю эту строку перед ApplyPropertyChanges:
System.Data.Objects.ObjectStateEntry x = base._entities.ObjectStateManager.GetObjectStateEntry(originalContact);
x содержит запись правильного типа. ( отладочное изображение )
Примечание: я сделал небольшое отклонение от учебника и поместил объект entity в суперкласс, поэтому мне не нужно объявлять один и тот же объект во всех моих контроллерах. Но та же проблема возникает при следовании руководству.