[英]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.