2

下面是一個簡單的場景來解釋我正在嘗試執行的操作。假設我正在創建博客引擎,並且我有兩個實體,PostComment,兩者之間有一對多的關係。在我服務層,我有一個查詢邏輯來獲取關於開起來後的細節:如何執行集成測試以測試渴望加載的實體(EF4代碼優先)

Post post = new PostByIdQuery(_unitOfWork).WithPostId(5).Execute(); 

這行代碼將執行一個查詢,將與價值的ID從數據庫中檢索後實體5.這個查詢對象已經被編碼並且使用一個真實的數據庫來通過集成測試。

有兩個業務流程,我可能希望通過指定的ID獲取帖子,如果我正在編輯帖子或者當我顯示帖子及其評論。此查詢對象適用於這兩種情況,但由於默認情況下延遲加載評論列表,因此在顯示包含評論的帖子時會影響性能。因此,雖然遍歷帖子的評論將導致多個數據庫命中。

當然,如果我總是渴望負載後的意見,如果我「米只是編輯後會引起不必要的表連接。

因此,我想新的方法添加到流暢的界面,指定是否應該延遲加載註釋問題是,如何編寫集成測試來檢查註釋表是否已急切加載,因此,無論何時運行單元/集成測試,都可以檢查這個新需求:

據我所知,Post.Comments屬性在訪問時會顯示相同的內容,無論它是急切加載還是懶加載,所以我不知道如何爲此創建測試。


編輯:作爲一個供參考,這是使用EF4的代碼優先機制,因此我的實體是波蘇斯。

+0

天上 - 代碼第一次 - 對不起,這使這是一個非常困難的問題。 – 2011-02-17 04:43:36

+0

是的np,我原本沒有說清楚:) – KallDrexx 2011-02-17 04:45:43

回答

2

您有可能將集合對象轉換爲更高級的EntityCollection類型,然後檢查其中的IsLoaded屬性。

Assert.IsTrue(((EntityCollection<Comment>)Post.Comments).IsLoaded); 

如果這樣行不通,請看看Rowan對這個問題的回答。我試圖讓我的代碼優先集合被暴露爲EntityCollection出於不同的原因。

Using CreateSourceQuery in CTP4 Code First