繁体   English   中英

在ASP.NET MVC中使用实体框架时出现问题

[英]Problem when using Entity Framework in ASP.NET MVC

我使用实体框架在ASP.NET MVC中实现我的数据访问层。 我在View中遇到问题。

当我的代码在VIEW中显示为:

我在运行时出现错误:

你调用的对象是空的。

说明:执行当前Web请求期间发生未处理的异常。 请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。

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

源错误:

第14行:

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

第17行:

这是从强类型视图模板生成的。 我确保将模型引用添加到web.config中,而在使用LINQ to SQL时没有遇到此错误

有什么帮助吗?

由于我无法对答案发表评论,因此我将通过一个新答案进行回答。.我注意到您的属性称为“名字”,您是否有机会尝试做教程? 这是您遇到问题的“编辑”操作吗?

因为这是我和我的2个同学所遇到的完全相同的问题。 这是对该问题的更详细说明:

这是控制器操作:

[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(字符串EntitySetName,对象已更改)
在C:\\ Users \\ Jeroen \\ Desktop \\ ContactManager \\ ContactManager \\ ContactManager \\ ContactManager \\ Controllers \\ HomeController.cs:line 65}中的ContactManager.Controllers.HomeController.Edit(Contact contactToEdit)处

当我在ApplyPropertyChanges之前添加此行时:

System.Data.Objects.ObjectStateEntry x = base._entities.ObjectStateManager.GetObjectStateEntry(originalContact);

x确实包含正确类型的条目。 调试图像

注意:我与本教程略有不同,将实体对象放入超类中,因此不必在所有控制器中都声明相同的对象。 但是,按照本教程进行操作时,也会出现相同的问题。

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

如果数据库中的主键是CategoryID,则您认为应该将代码修改为

ID = Model.CategoryID

但实际上,您应该这样做

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

否则,它将不会填充模型。

喘口气,希望对您有所帮助!

有时Model为null,因为带有.FirstOrDefault()方法的select语句未带来有效的对象。

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

看起来您的模型似乎未在控制器中正确填充。 您的问题中没有足够的信息来确定到底出了什么问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM