Проблема при использовании Entity Framework в ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/801821

  •  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() и перекомпилируйте свое решение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top