2009-02-08 88 views
2

說我有一個角色實體和一個網站實體。現在,一個站點有很多角色,所以在Role類中有一個表示該關係的Site屬性。如果我想要的角色的網站,我會做到這一點:實體框架:加載多對一實體

Site.Roles.Load() 

的問題是,因爲在角色類站點屬性不是一個集合,但只是一個單一的實體,沒有Load方法:

currentRole.Site //???? 

因此,當一個角色被加載時,網站是空的,沒有辦法獲得網站,除了說角色集合上的查詢來獲得SiteID,從網站集中獲取網站,最後將其設置爲currentRole的網站屬性。

必須有更好的方法?我是否必須在查詢中強制進行某種連接?看起來像這樣會由代碼生成,就像Load方法的行爲一樣。

回答

1

訪問它將加載它。如果您希望它明確加載它,則對象查詢應該有一個.Include()方法。

db.Sites.Include("Role").ToList(); 

Here's some documentation

6

實際上,訪問它不會自動加載它。您可以使用Include方法在單個查詢中包含相關實體,但您也可以像引用集合一樣使用引用的Load方法 - 它只是不在CLR引用屬性上,而是在與CLR平行的EntityReference屬性上參考實體。它的名稱與CLR參考文件相同,但加上了「參考」一詞。所以,你可以說:

currentRole.SiteReference.Load(); 

對於它的價值,在VS 2010/.NET 4.0版本的EF,它也將有可能設置在ObjectContext的一個屬性,它會變成隱懶加載等等訪問clr引用將自動加載它,如果它尚未被加載。

Danny

+2

是的,如果(!BlaahReference.IsLoaded)BlaahReference.Load();在我的代碼中調用越來越煩人..我很高興他們正在爲此添加隱式支持。 – misteraidan 2009-05-22 00:24:09