日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FreeSql (二十六)贪婪加载 Include、IncludeMany、Dto、ToList

發布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeSql (二十六)贪婪加载 Include、IncludeMany、Dto、ToList 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

貪婪加載顧名思議就是把所有要加載的東西一次性讀取。

本節內容為了配合【延時加載】而誕生,貪婪加載和他本該在一起介紹,開發項目的過程中應該雙管齊下,才能寫出高質量的程序。

Dto 映射查詢

Select<Tag>().Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title }); Select<Tag>().Limit(10).ToList(a => new TestDto()); Select<Tag>().Limit(10).ToList(a => new TestDto { }); Select<Tag>().Limit(10).ToList(a => new TestDto() { }); Select<Tag>().Limit(10).ToList<TestDto>();

這種映射支持單表/多表。

查找規則,查找屬性名,會循環內部對象 _tables(join 查詢后會增長),以 主表優先查,直到查到相同的字段。

如:

A, B, C 都有 id,Dto { id, a1, a2, b1, b2 },A.id 被映射。也可以指定 id = C.id 映射。

友情提醒:在 dto 可以直接映射一個導航屬性

導航屬性 ManyToOne/OneToOne

ManyToOne/OneToOne 導航屬性通過 ToList() 加載,這個方法有一個參數:includeNestedMembers。

參數說明:

false: 返回 2級 Join 的數據;

true: 返回所有層級深度 Join 的導航數據;

如果查詢中已經使用了 a.Parent.Parent 類似表達式,則可以無需 LeftJoin 等操作。

如:

Select<Tag>().Where(a => a.Parent.Name == "1").ToList(); //這樣寫,不需要再標記 Join,解析表達式時自動處理成 LeftJoin

如果導航屬性沒有使用,又想加載,可使用 Include 方法。

Select<Tag>().Include(a => a.Parent).ToList();

導航屬性 OneToMany/ManyToMany

IncludeMany 貪婪加載集合的導航屬性,其實是分兩次查詢,在 ToList 后進行了數據重裝。

Select<Tag>().IncludeMany(a => a.Songs).ToList(); //這是 ManyToMany 關系的貪婪加載

OneToMany 的使用方法相同

IncludeMany 有第二個參數,可以進行二次查詢前的修飾工作。

Select<Tag>().IncludeMany(a => a.Songs, then => then.Where(song => song.User == "admin")).ToList();

然后,其實在 then 那里,還可以繼續進行向下 Include/IncludeMany。只要你喜歡,向下 100 層都沒問題。

變異

變異的 IncludeMany,即使選擇的不是導航屬性,也可以貪婪加載。

Select<Tag>().IncludeMany(a => a.TestManys.Where(b => b.TagId == a.Id));

支持聯合鍵關系指定

比如 EFCore include 吧,如何只查詢每項子集合的前幾條數據,它只可以加載所有導致IO性能低下(如果某些子集合,有100條,200條),FreeSql 可以解決這個問題。

Select<Tag>().IncludeMany(a => a.TestManys.Take(10));

系列文章導航

  • (一)入門

  • (二)自動遷移實體

  • (三)實體特性

  • (四)實體特性 Fluent Api

  • (五)插入數據

  • (六)批量插入數據

  • (七)插入數據時忽略列

  • (八)插入數據時指定列

  • (九)刪除數據

  • (十)更新數據

  • (十一)更新數據 Where

  • (十二)更新數據時指定列

  • (十三)更新數據時忽略列

  • (十四)批量更新數據

  • (十五)查詢數據

  • (十六)分頁查詢

  • (十七)聯表查詢

  • (十八)導航屬性

  • (十九)多表查詢

  • (二十)多表查詢 WhereCascade

  • (二十一)查詢返回數據

  • (二十二)Dto 映射查詢

  • (二十三)分組、聚合

  • (二十四)Linq To Sql 語法使用介紹

  • (二十五)延時加載

  • (二十六)貪婪加載 Include、IncludeMany、Dto、ToList

  • (二十七)將已寫好的 SQL 語句,與實體類映射進行二次查詢

  • (二十八)事務

  • (二十九)Lambda 表達式

  • (三十)讀寫分離

  • (三十一)分區分表

  • (三十二)Aop

  • (三十三)CodeFirst 類型映射

  • (三十四)CodeFirst 遷移說明

  • (三十五)CodeFirst 自定義特性

轉載于:https://www.cnblogs.com/FreeSql/p/11531404.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的FreeSql (二十六)贪婪加载 Include、IncludeMany、Dto、ToList的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。