【发布时间】:2011-09-29 13:59:18
【问题描述】:
问题
不知道这样做的正确方法是什么...我有一个简单的类:
public partial class Event
{
public int Id { get; set; }
public string Description { get; set; }
public int? PreviousEventId { get; set; }
public virtual Event PreviousEvent { get; set; }
}
在我的 MVC 3 项目中,我有一个用于编辑事件描述和(可选)从下拉列表中选择上一个事件的表单。表单被提交给一个动作,并且像往常一样使用 MVC 3,自动映射到 Event:
[HttpPost]
public ActionResult SaveEvent(Event myEvent)
{
if (ModelState.IsValid)
{
Db.Entry(myEvent).State = EntityState.Modified;
// do some additional checks
Db.SaveChanges();
}
}
在保存我的实体之前,我想做一些需要访问 PreviousEvent 的额外验证。但是,当我在上面的代码中访问它时,导航属性始终为null。这是有道理的 - 表单直接映射到我的 POCO 类 Event,而不是它由 EF 创建的代理。
问题
有什么方法可以将我修改后的Event 替换为其代理,以便 EF 可以帮助加载其导航属性?我可以这样做:
Db.Entry(myEvent).Reference(e => e.PreviousEvent).Load();
// do some checking on myEvent.PreviousEvent
...但是以这种方式加载所有导航属性似乎很普通(这个类比显示的要多得多),我希望 EF 有更好的方法来做到这一点。真的吗?
【问题讨论】:
标签: asp.net-mvc-3 entity-framework-4.1 poco dbcontext