EF Core 1.0中使用Include的小技巧


(此文章同時發表在本人微信公眾號“dotNET每日精華文章”,歡迎右邊二維碼來關注。)

題記:由於EF Core暫時不支持Lazy Loading,所以利用Include來加載額外數據就顯得很有必要。今天分享一個使用Include的小技巧。

在實體框架Entity Framework 6及之前的版本中,數據模型的導航屬性只要加上virtual關鍵字,在你訪問這個屬性的時候(不管是對象還是對象集合),EF的內部機制就會自動加載相關數據。這一特性就稱之為Lazy Loading,其為開發帶來極大方便(尤其需要快速開發的時候),因為不用操心去查詢關聯數據。當然缺點也很明顯,就是這種查詢方式其實是低效的,且在某些情況下使用不當也會造成性能問題。

當然除了使用Lazy Loading外,你還可以使用Include來預先加載關聯數據(執行一次查詢返回多個數據結果),此特性稱之為Eagerly Loading。而在Entity Framework Core 1.0中,目前暫時沒有提供Lazy Loading的特性,所以要加載關聯數據的話,一般就采用Include方法。

在EF6.x和EF Core 1.0中,Include的使用基本一致,不過在加載多級數據的時候就有所不同了。EF6.x的方式比較簡單直接,詳細見:https://msdn.microsoft.com/zh-cn/data/jj574232#eagerLevels,在EF Core 1.0中就需要用到新的ThenInclude方法。詳細用法見我下面的示例代碼:

var get = await db2.Sites
    .Include(o => o.ArticleColumns).ThenInclude(o => o.Categories)
    .Include(o => o.ArticleColumns).ThenInclude(o => o.Articles)
    .SingleOrDefaultAsync(o => o.Id == site.Id);

完整的示例代碼見:http://git.oschina.net/ike/codes/jtu9dnsk3pe6x24clbq50

以上代碼也給出了如何在內存中測試EF Core的模型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM