Проблема при использовании Entity Framework в ASP.NET MVC
-
03-07-2019 - |
Вопрос
Я использую Entities Framework для реализации уровня доступа к данным в ASP.NET MVC.У меня возникла проблема во View.
Когда мой код во VIEW что-то вроде:
Я получил ошибку во время выполнения:
В экземпляре объекта не задана ссылка на объект.
Описание:Во время выполнения текущего веб-запроса произошло необработанное исключение.Просмотрите трассировку стека, чтобы получить дополнительную информацию об ошибке и ее источнике в коде.
Подробности исключения:System.NullReferenceException:В экземпляре объекта не задана ссылка на объект.
Ошибка источника:
Строка 14:
Строка 15:< %= Model.firstname %> Линия 16:
Строка 17:Это создается на основе шаблона представления со строгой типизацией.Я обеспечил, чтобы я добавил реферат модели в web.config Я не столкнулся с этой ошибкой, когда использовал LINQ для SQL
Любая помощь?
Решение 2
Я понял!Проблема была в представлении обычно, это было бы, используя (html.beginform (new {id = model.id})))
Если бы первичным ключом в вашей базе данных был CategoryID, вы могли бы подумать, что вам следует адаптировать код к
Идентификатор = Model.CategoryID
НО, на самом деле, вам следует сделать это так,
используя (Html.BeginForm(new { CategoryID = Model.CategoryID}))
В противном случае модель не будет заполнена.
Возродитесь, надеюсь, это поможет!
Другие советы
Поскольку я не могу комментировать ответ, я сделаю это через новый ответ.Я заметил, что ваш атрибут называется «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 (StringentitySetName, Объект изменен)
в ContactManager.Controllers.HomeController.Edit(Contact contactToEdit) в C:\Users\Jeroen\Desktop\ContactManager\ContactManager\ContactManager\Controllers\HomeController.cs:line 65}
Когда я добавляю эту строку перед ApplyPropertyChanges:
System.Data.Objects.ObjectStateEntry x = base._entities.ObjectStateManager.GetObjectStateEntry(originalContact);
x содержит запись правильного типа.(отладочное изображение)
Примечание:Я сделал небольшое отступление от руководства и поместил объект сущности в суперкласс, чтобы мне не приходилось объявлять один и тот же объект во всех моих контроллерах.Но та же проблема возникает при следовании учебнику.
Похоже, ваша модель неправильно заполнена в контроллере.В вашем вопросе недостаточно информации, чтобы понять, что именно происходит не так.
Иногда Модель имеет значение NULL, поскольку оператор выбора с методом .FirstOrDefault()
не принес действительный объект.
Вы всегда можете изменить .FirstOrDefault()
к .First()
и перекомпилируйте свое решение.