Проблема при использовании Entity Framework в ASP.NET MVC - PullRequest
1 голос
/ 29 апреля 2009

Я использую Entities Framework для реализации моего уровня доступа к данным в ASP.NET MVC. У меня проблема с View.

Когда мой код в ПРОЦЕССЕ выглядит примерно так:

Я получил ошибку во время выполнения:

Ссылка на объект не установлена ​​для экземпляра объекта.

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

Ошибка источника:

Строка 14:

Строка 15: <% = Model.FirstName%> Строка 16:

Строка 17:

Это генерируется из строго типизированного шаблона представления. Я гарантировал, что я добавил модель ссылки на web.config Я не сталкивался с этой ошибкой, когда использовал LINQ to SQL

Любая помощь?

Ответы [ 4 ]

2 голосов
/ 30 апреля 2009

Поскольку я не могу комментировать ответ, я сделаю это с помощью нового ответа .. Я заметил, что ваш атрибут называется «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 в суперкласс, поэтому мне не нужно объявлять один и тот же объект во всех моих контроллерах. Но та же проблема возникает при следовании руководству.

1 голос
/ 06 мая 2009

Я понял это! Проблема была в ВИДЕ Обычно это было бы, using (Html.BeginForm (new {Id = Model.Id})) *

Если первичным ключом в вашей базе данных был CategoryID, вы могли бы подумать, что вам следует адаптировать код к

Id = Model.CategoryID

НО, на самом деле, вы должны сделать это так,

с использованием (Html.BeginForm (new {CategoryID = Model.CategoryID})) *

В противном случае модель не будет заполнена.

Возродись, надеюсь, это поможет!

0 голосов
/ 23 февраля 2010

Иногда Модель имеет значение null, поскольку оператор выбора с методом .FirstOrDefault() не привел действительный объект.

Вы всегда можете изменить .FirstOrDefault() на .First() и перекомпилировать свое решение.

0 голосов
/ 29 апреля 2009

Похоже, ваша модель не заполнена должным образом в контроллере. Хотя в вашем вопросе недостаточно информации, чтобы понять, что именно идет не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...