2014-06-24 21 views
0

我是實現一個加載和保存酒店合同的Web服務。這是類結構(簡化)如何有效地加載複雜的對象實體框架6

public class Contract 
{ 
    public int id { get; set; } 
    public virtual ICollection<Season> seasonList { get; set; } 
    public virtual ICollection<Room> roomList { get; set; } 
} 

public class Season 
{ 
    public int id { get; set; } 
    public Contract contract { get; set; } 
    public virtual ICollection<Season_Date> season_DateList { get; set; } 
} 

public class Room 
{ 
    public int id { get; set; } 
    public Contract contract { get; set; } 
    public virtual ICollection<Contingent> contingentList { get; set; } 
} 

public class Season_Date 
{ 
    public int id { get; set; } 
    public Season season { get; set; } 
} 

public class Contingent 
{ 
    public int id { get; set; } 
    public Season season { get; set; } 
    public Room room { get; set; } 
} 

對於加載方法,需要加載一個包含所有細節的合同。我不想使用include,因爲涉及到很多表和字段,我擔心,結果查詢是複雜的。 有沒有辦法使用合同ID加載season_date和臨時記錄?

回答

0

您可以使用延遲加載,這意味着相關實體將被從數據庫中第一次嘗試訪問它們(雖然這並不系列化很好地工作)加載。你對你的DbContext類的Configuration屬性配置懶加載:

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
    { 
     this.Configuration.LazyLoadingEnabled = true; 
    } 
} 

關係屬性必須是虛擬的,但你已經這樣做了。

如果您已經知道合同編號,那您爲什麼不能直接執行以下操作?上裝載相關實體

var contract = myDbContext.Contracts.FirstOrDefault(c => c.id == idIWant); 

更多信息,請on this msdn page.

+0

喜。延遲加載可以做到這一點,但是當我已經知道,我不需要完整的對象圖。如果我每個賽季有5個賽季和2個日期,那麼使用延遲加載,我會向數據庫(合同+季節列表+ 5 x season_date列表)獲得7個查詢。但通過使用合同的聯接或構建in(id list)查詢,可以在3個查詢中獲取相同的數據(合約+季節列表+合約id中的season_date列表)。 –