2012-04-26 125 views
2

我們有一個項目使用實體框架4.1代碼優先進行數據存儲。它的編碼方式是將EF抽象到存儲庫模式後面。當從存儲庫中獲取實體時,數據集會傳入一個巨大的包含字符串列表,告訴它所有相關的實體也應該被提取。這會導致一個非常龐大的查詢,可能需要10秒才能運行 - 即使數據庫中沒有數據!延遲加載相關實體不與實體框架一起使用4.1

已經有很多使用存儲庫編寫代碼來訪問數據庫,我需要在不打破模式的情況下理想地提高性能。

我想改變的事情,以便在搜索數據庫時,不包括字符串傳遞給數據集(或只是最小包括字符串)。當從數據庫中提取實體時,它們的相關實體將在第一次訪問時通過延遲加載進行加載。

我有一個名爲捐贈與這樣的導航性能等級:

public virtual Employee Donor { get; private set; } 

無論捐贈和員工類有一個私人蔘數的構造函數。當使用包含字符串「捐贈者」時,我可以獲取捐贈列表,並且他們會隨附Donor一起返回。

當我從沒有包含字符串的存儲庫獲取捐贈時,捐助者通常返回爲空。如果偶然發生我以相關員工身份登錄,系統中其他查詢將已經從Employee存儲庫中提取我的Employee實體。發生這種情況時,員工設置正確返回捐贈!很顯然,如果數據已經從先前的查詢中獲得,那麼數據將被「延遲加載」。但總的來說,我不會再向捐助者和所有其他實體查詢過。

任何人都可以提出我可能做錯了什麼?對於長期的問題抱歉。如果需要,我可以發佈更多的代碼,但它是完全不同的。提前致謝!

回答

4

我相信,如果你按照這個頁面上的指導,http://msdn.microsoft.com/en-us/library/dd468057.aspx你應該得到你以後的結果。爲了讓你的無參數構造函數受到保護,這應該有所幫助。

但是,請看看其餘的指導。

+0

哦。我的。神。我不知何故未找到您鏈接的指南頁面。我不知道這個使用私有無參數構造函數的想法來自哪裏......但它是有道理的,它需要一個受保護的構造函數。它現在有效!謝謝! – DaveBeta 2012-04-26 16:53:27

相關問題