EF中的預先加載和延遲加載
阿新 • • 發佈:2018-06-15
category lazy job lazy load AS ger esc csv AR
延遲加載(Lazy Loading):當實體第一次被讀取時,相關數據不會被獲取,只會讀取本身。延遲加載的數據不會一次性查出來,而是一條一條的查詢,這樣就會多次請求數據庫進行查詢。
預先加載<Eager Loading>:預先加載會把所有的數據一次性從數據庫中讀取出來,預先加載就是從數據庫中一次性查詢所有數據,存放到內存中。
寫個例子:一般我是這麽處理的
1、在數據庫上下文中禁用延遲加載
public DBaseContext() : base("MHaloDBaseContext") { this.Configuration.LazyLoadingEnabled = false; }
因為上下文是默認延遲加載的,這樣做的結果是所有的默認為預先加載。
2、下面定義一個類,說明一下
public class Recruit : EntityBase { public Recruit() { IsShow = true; } public string Name { get; set; } public string Describe { get; set; } public int OrderId { get; set; } publicbool IsShow { get; set; } public int JobCategoryId { get; set; } public virtual JobCategory JobCategory { get; set; } }
在查詢Recruit 這個類的時候不會加載關聯類JobCategory 的相關數據,因為我們用了virtual 關鍵字,只有顯式調用時才會加載,如果去掉virtual 關鍵字,關聯類JobCategory 的相關數據就會被加載。
3、如果需要關聯表數據則用Include()
varlist = recSvc.Res.Table() .Pager(filter, o => o.OrderByDescending(s => s.Id), out total, query.page, query.rows).Include(s => s.JobCategory).ToList();
查詢的時候用.Include(s => s.JobCategory)就可以把相關數據查詢出來。
EF中的預先加載和延遲加載