Problema ao usar o Entity Framework em ASP.NET MVC
-
03-07-2019 - |
Pergunta
Eu uso Entidades Framework para implementar os meus dados accsee camada na ASP.NET MVC. Eu tenho um problema na vista.
Quando meu código no VIEW algo como:
Eu tenho um erro em tempo de execução:
objecto de referência não definida para uma instância de um objecto.
Descrição: Uma exceção não tratada ocorreu durante a execução da solicitação da web atual. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.
Exceção detalhes: System.NullReferenceException:. Referência de objeto não definida para uma instância de um objeto
Fonte de erro:
Linha 14:
Linha 15: <% = Model.FirstName%> Linha 16:
Linha 17:
Este é gerada a partir de modelo de visão forte-digitado. Eu garantiu que eu adicionei modelo referrence para web.config Eu não encontrar este erro quando eu estava usando LINQ to SQL
Qualquer ajuda?
Solução 2
Eu percebi isso! O problema era na vista Normalmente, seria, usando (Html.BeginForm (novo {id = Model.Id}))
Se a chave primária em seu banco de dados foi CategoryID, você pensaria que você deve adaptar o código para
ID = Model.CategoryID
Mas, na verdade, você deve fazê-lo como este,
usando (Html.BeginForm (new {CategoryID = Model.CategoryID}))
Caso contrário, não vai preencher o modelo.
Resurge, espero que ajude!
Outras dicas
Desde que eu não posso comentar sobre uma resposta eu vou fazê-lo através de uma nova resposta .. I perceber que o seu atributo é chamado de "Nome", não é por acaso tentando fazer este tutorial? E é esta ação Editar você está tendo problemas com?
Uma vez que este é o mesmo problema exato mim e 2 dos meus colegas estão tendo. Aqui está uma explicação mais detalhada do problema:
Esta é a ação do controlador:
[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();
}
}
Quando os ApplyPropertyChanges é chamado um exceção é levantada. (InvalidOperationException) Mensagem de exceção:
{System.InvalidOperationException:. Será que o ObjectStateManager não conter uma ObjectStateEntry com uma referência a um objeto do tipo 'ContactManager.Models.Contact'
em System.Data.Objects.ObjectContext.ApplyPropertyChanges (String EntitySetName, Objeto alterado)
em ContactManager.Controllers.HomeController.Edit (Contact contactToEdit) em C: \ Users \ Jeroen \ Desktop \ ContactManager \ ContactManager \ ContactManager \ Controladores \ HomeController.cs: linha 65}
Quando eu adicionar esta linha antes ApplyPropertyChanges:
System.Data.Objects.ObjectStateEntry x = base._entities.ObjectStateManager.GetObjectStateEntry(originalContact);
x contém uma entrada do tipo correto. ( depuração imagem )
Nota: Eu fiz um pequeno desvio do tutorial e colocar as entidades objeto em uma superclasse, então eu não tenho que declarar o mesmo objeto em todos os meus controladores. Mas o mesmo problema surge quando seguindo o tutorial.
Parece que o seu modelo não está preenchido corretamente no controlador. Há informações realmente não o suficiente na sua pergunta para descobrir o que exatamente está acontecendo embora errado.
Às vezes Modelo é nulo porque a instrução SELECT com a .FirstOrDefault()
método não trouxe um objeto válido.
Você sempre pode mudar .FirstOrDefault()
para .First()
e recompilar a sua solução.