2011-07-25 73 views
0

我有我的數據訪問類的代碼,我想加載所有患者,他們應該有,Patient.Addresses,Patient.Examinations,Examinations.LeftEye,Examinations.RightEye。 ...實體框架4.0自我跟蹤加載導航屬性

如何將所有相關數據加載到患者身上?我還沒有設法加載地址。

這是當前的代碼:

  db.Patients.Include("Addresses"); 
      db.Patients.Include("Examinations"); 

      db.Examinations.Include("LeftEyePictures"); 
      db.Examinations.Include("RightEyePictures"); 

      List<Patient> list = db.Patients.ToList(); 

      list.ForEach(p => p.ChangeTracker.ChangeTrackingEnabled = true); 

      return list; 

謝謝。

回答

1

Include必須是查詢的一部分!

List<Patient> list = db.Patients.Include("Addresses") 
           .Include("Examinations.LeftEyePicutres") 
           .Include("Examinations.RightEyePicutres") 
           .ToList(); 
+0

這是我的第一種方法,我是否使用導航屬性名稱設置了包含字符串參數的權利?或模型表的名稱? –

+0

它迄今爲止工作.... Thanx –

+0

您必須使用導航屬性的名稱。 –

1

有兩種方式: 1: 使lazzy負荷加載

db.ContextOptions.LazyLoadingEnabled = true; 
List<Patient> list = db.Patients.ToList(); // here is All Patients with Linked objects 
db.ContextOptions.LazyLoadingEnabled = false; 

在此之前禁用,如果你不需要它

第二:Handload

db.Patients.Addresses.Load() 
    db.Patients.Examinations.Load() 
    db.Examinations.LeftEyePictures.Load() 
    db.Examinations.RightEyePicturesLoad() 

你可以在加載之前chesk :(這個或類似的)

if(db.Patients.Addresses.IsLoaded==false) 
     db.Patients.Addresses.Load 
+0

LazyLoadingEnabled無法正常工作我沒有得到它.... –

+0

第二手資料我無法找到任何db.Patients.Address屬性或任何Load()方法 –

+0

謝謝,這真的很有幫助... –