2010-08-26 35 views
4

在網站上我目前正在努力,我決定給EF4 Code First一個鏡頭。它似乎並不壞,儘管不支持枚舉意味着令人印象深刻的觀點被簡單的短暫反應所否定。EF4代碼優先:延遲加載問題

無論如何,我現在的問題是,我有一個書籍對象,其中有作者的集合。當我點擊一本頁面被審閱的頁面時,當本書的作者無法添加到viewdata中時會出現錯誤 - 說這本書的作者收藏是空的。

所以,我導航到管理頁面,去編輯本書,然後突然間作者重新出現。所以我回到評論頁面,作者現在也出現在這個頁面上。

看起來他們沒有在第一次加載,但由於某些原因,管理部分導致他們加載,所以當我回到審查頁面時,它一切正常。

如果我碰巧做了重新編譯,並直接進入審查頁面,他們又走了。

我從使用CreateObject集的上下文中獲取我的書 - 通過存儲庫。該方法既用於管理頁面也用於審閱頁面。

非常感謝您能夠提供幫助。

回答

8

要允許在POCO類上進行延遲加載,您必須將導航屬性標記爲虛擬。要強制加載修改您的存儲庫中的查詢,並在查詢的ObjectSet上使用像Include(「Authors」)之類的東西。

1

剛做了一點調查,我知道它爲什麼在管理頁面上工作。通過調試後,我發現本書的作者集合最初是空的。但是,當呈現選擇列表時,該列表包含系統中的所有作者,然後將其作者集收集起來。

因此,在我的審查行動中,我從存儲庫中檢索所有作者,而不以任何方式使用它們,然後我的書的集合也被填充。

我想這一切都會導致這樣一個問題:我該如何修復延遲加載,或者如何確保急切的加載。我認爲性能永遠不會很關鍵,現在我已經有了足夠的代碼。想想我會堅持活動記錄/ nhibernate暫時在其他項目。