问题
不知道这样做的正确方法是什么......我有一个简单的课程:
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 有更好的方法来做到这一点。真的吗?