問題後
不知道該怎麼做了正確的方式,這是......我有一個簡單的類:EF 4.1 POCO訪問導航屬性Db.Entry()
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有這樣做的更好的方法。它確實嗎?
你是一個明星,這看起來就像我希望的那樣!現在我只需要找到一些通用的方法來將動態代理的屬性綁定到我的Event屬性上,我們很好去:-) – Dav
剛剛在另一個任務上遇到'TryUpdateModel',這似乎適合賬單很好。但是,當我做'Event eventDb = Db.Events.Create(); TryUpdateModel(eventDb);'',''eventDb.PreviousEvent''仍然是空的,即使你的類型是一個動態代理。爲什麼? – Dav
您是否也將事件附加到上下文中? –