2010-10-01 18 views
2

我正在使用實體框架...我有一個數據庫表患者僱員表具有非強制外鍵關係,因此我可以將經理與患者相關聯。檢查EF中的空對象會導致額外的數據庫命中...怎麼回事?

我創建了實體EF爲患者,則員工和患者與員工之間的關聯,這是我的名字,以ManagerEmployee

我還創建了另一部分類患者,讓我輕易地得到從我的業務對象類僱員的姓名,也被稱爲患者

public string ManagerName 
    { 
     get { return this.ManagerEmployee == null ? string.Empty : this.ManagerEmployee.Name; } 
    } 

所以我必須:

  • 患者實體
  • 患者局部類 (以幫助一些數據 檢索)
  • 患者DTO(從 病人實體讀取)

我現在的問題是如果ManagerId(在這種情況下是Guid)與員工無關,或者沒有設置(Guid.Empty)...即使我急於加載,它仍會再次觸發數據庫。

IQueryable<Data.Patient> query = ctx.ObjectContext.Patients.Include("ManagerEmployee"); 

所以,如果我有1000條記錄,有此值集,一切都很好,但如果經理ID值不上任何一個記錄集,它使1 + 1000的數據庫訪問。

想知道是否有其他人有這個問題?可能有一些更大的與我的EF實體和/或協會的建設問題,所以我打開其他建議。

謝謝!

回答

2

這現在很老了,但如果你還沒有找到解決方案,我的建議是關閉延遲加載。最可能發生的情況是,當您嘗試訪問一個爲null的屬性時,延遲加載正在發生。請參閱 http://www.asp.net/entity-framework/tutorials/maximizing-performance-with-the-entity-framework-in-an-asp-net-web-application 如果您首先使用數據庫,或者使用 http://www.asp.net/entity-framework/tutorials/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application 爲MVC代碼優先。

相關問題