在ASP.NET MVC中使用Entity Framework时出现问题

时间:2009-04-29 10:52:11

标签: asp.net-mvc entity-framework

我使用Entities Framework在ASP.NET MVC中实现我的数据accsee层。我在View中遇到了问题。

当我在VIEW中的代码时:

 

我在运行时遇到错误:

对象引用未设置为对象的实例。

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

来源错误:

第14行:

第15行:<%= Model.FirstName%> 第16行:

第17行:

这是从强类型视图模板生成的。 我确保我在web.config中添加了模型引用 我在使用LINQ to SQL

时没有遇到此错误

任何帮助?

4 个答案:

答案 0 :(得分:2)

由于我无法对答案发表评论,我将通过新答案进行评论。 我注意到你的属性被称为“FirstName”,你是否有机会尝试this教程? 这是您遇到问题的编辑操作吗?

因为这和我和我的同学中有两个问题完全相同。 以下是对该问题的更详细解释:

这是控制器动作:

[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时会引发exception。 (InvalidOperationException异常) 异常消息:

  

{System.InvalidOperationException:ObjectStateManager不包含ObjectStateEntry,其中引用了“ContactManager.Models.Contact”类型的对象。
  at System.Data.Objects.ObjectContext.ApplyPropertyChanges(String entitySetName,Object changed)
  在ContactManager.Controllers.HomeController.Edit(联系contactToEdit)C:\ Users \ Jeroen \ Desktop \ ContactManager \ ContactManager \ ContactManager \ Controllers \ HomeController.cs:第65行}

当我在ApplyPropertyChanges:

之前添加此行时
System.Data.Objects.ObjectStateEntry x = base._entities.ObjectStateManager.GetObjectStateEntry(originalContact);

x确实包含正确类型的条目。 (debug image

注意:我偏离了教程并将实体对象放在超类中,因此我不必在所有控制器中声明相同的对象。但是在学习本教程时会出现同样的问题。

答案 1 :(得分:1)

我明白了! 问题出在VIEW中 通常,它会是,  使用(Html.BeginForm(new {Id = Model.Id}))

如果数据库中的主键是CategoryID,您会认为应该将代码调整为

Id = Model.CategoryID

但实际上,你应该这样做,

使用(Html.BeginForm(new {CategoryID = Model.CategoryID}))

否则,它不会填充模型。

复活,希望它有所帮助!

答案 2 :(得分:0)

看起来您的模型未在控制器中正确填充。你的问题中没有足够的信息可以弄清楚到底出了什么问题。

答案 3 :(得分:0)

有时模型为空,因为带有方法.FirstOrDefault()的select语句没有带来有效对象。

您可以随时将.FirstOrDefault()更改为.First()并重新编译解决方案。