2016-08-04 50 views
0

使用實體框架的選擇關係表的時候,我們必須手工「包含」在查詢相關資料,例如:ASP.Net MVC。如何在Entity Framework查詢中始終包含相關數據?

MyEntity entity = db.MyEntities 
      .Include(e => e.related_1) 
      .Include(e => e.related_2) 
      .FirstOrDefault(e => e.Id == id); 

否則entity.related_1或entity.related_2將是無效的。

我想知道是否有辦法在選擇它之前設置預包含關係,而不是每次選擇相關數據。例如:

db.preInclude(???) // not a real method. 
someOtherCode(...) 
MyEntity entity_1 = db.MyEntities.Find(id_1); 
MyEntity entity_2 = db.MyEntities.Find(id_2); 
MyEntity entity_3 = db.MyEntities.Find(id_3); 

回答

1

讓您的相關虛擬的,因此,使延遲加載,這樣,你不需要調用包含明確的,當你指的這個虛擬的相關實體,它將被從數據庫中檢索

+0

如何「虛擬」屬性使這種差異? –

+1

使相關的屬性虛擬只是啓用延遲加載 –

+0

它只是一個約定?還是有一些邏輯? –

1

創建一個返回想要查詢的功能,然後執行它:

public IQueryable getTheEntity(DbContext database) { 
    var query = from e in database.MainEntity.Include("SubEntity1.Another").Include("SubEntity2"); 

    return query; 
} 

然後調用該函數時,你需要的是整個模型:

using (MyDbContext database = new MyDbContext()) { 
    var result = (from e in getTheEntity(database) where ...).FirstOrDefault(); 
} 

你甚至可以在您的DbContext類上創建getTheEntity(...)擴展名,所以調用它稍微不詳細:

var result = (from e in database.getTheEntity() where ...).ToList(); 
相關問題