FreeSql (十八)導航屬性

導航屬性是 FreeSql 的特色功能之一,可通過約定配置、或自定義配置對象間的關系。

導航屬性有 OneToMany, ManyToOne, ManyToMany, OneToOne, Parent 五種配置關系。

有了導航屬性,多表查詢會非常方便,lambda 表達式中直接使用導航對象點點點,舒服!!

除了查詢還有更多其他的特性在后續文章中再介紹。

自定義導航關系

//導航屬性,OneToMany
[Navigate("song_id")]
public virtual List<song_tag> Obj_song_tag { get; set; }//導航屬性,ManyToOne/OneToOne
[Navigate("song_id")]
public virtual Song Obj_song { get; set; }//導航屬性,ManyToMany
[Navigate(ManyToMany = typeof(tag_song))]
public virtual List<tag> tags { get; set; }
  • 可約定,可不約定;
  • 不約定的,需指定 Navigate 特性關聯;
  • 無關聯的,查詢時可以指明 On 條件,LeftJoin(a => a.Parent.Id == a.ParentId);
  • 已關聯的,直接使用導航對象就行,On 條件會自動附上;

也可以使用 FluentApi 在外部設置導航關系:

fsql.CodeFirst.ConfigEntity<實體類>(a => a.Navigate(b => b.roles, null, typeof(多對多中間實體類)).Navigate(b => b.users, "uid")
);

優先級,特性 > FluentApi

約定配置

OneToOne 一對一

class User {public int Id { get; set; } //Id、UserId、User_idpublic UserExt UserExt { get; set; }
}class UserExt {public int id { get; set; } //Id、UserId、User_id、UserExtId、UserExt_idpublic User User { get; set; }
}

《OneToOne 一對一,怎么添加數據?》

ManyToOne 多對一

class Group {public int Id { get; set; } //Id、GroupId、Group_id
}class User {public int Id { get; set; } //Id、UserId、User_idpublic int AGroupId { get; set; }public Group AGroup { get; set; }public int BGroupId { get; set; }public Group BGroup { get; set; }
}

OneToMany 一對多

class Group {public int Id { get; set; } //Id、GroupId、Group_idpublic ICollection<User> AUsers { get; set; }public ICollection<User> BUsers { get; set; }
}class User {public int Id { get; set; } //Id、UserId、User_idpublic int AGroupId { get; set; }public Group AGroup { get; set; }public int BGroupId { get; set; }public Group BGroup { get; set; }
}

《OneToMany 一對多,怎么添加數據?》

Parent 父子

class Group {public int Id { get; set; } //Id、GroupId、Group_idpublic int ParentId { get; set; } //ParentId、Parent_idpublic Group Parent { get; set; }public ICollection<Group> Childs { get; set; }
}

父子關系,與一對多其實差不多,添加數據參數上面的連接;

ManyToMany 多對多

class Song {[Column(IsIdentity = true)]public int Id { get; set; }public string Title { get; set; }public virtual ICollection<Tag> Tags { get; set; }
}
class Song_tag {public int Song_id { get; set; }public virtual Song Song { get; set; }public int Tag_id { get; set; }public virtual Tag Tag { get; set; }
}
class Tag {[Column(IsIdentity = true)]public int Id { get; set; }public string Name { get; set; }public int? Parent_id { get; set; }public virtual Tag Parent { get; set; }public virtual ICollection<Song> Songs { get; set; }public virtual ICollection<Tag> Tags { get; set; }
}

Song、Tag、Song_tag,這三個實體使用了 OneToMany、ManyToOne、Parent、ManyToMany 4種關系。

系列文章導航

  • (一)入門

  • (二)自動遷移實體

  • (三)實體特性

  • (四)實體特性 Fluent Api

  • (五)插入數據

  • (六)批量插入數據

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

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

  • (九)刪除數據

  • (十)更新數據

  • (十一)更新數據 Where

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

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

  • (十四)批量更新數據

  • (十五)查詢數據

  • (十六)分頁查詢

  • (十七)聯表查詢

  • (十八)導航屬性

  • (十九)多表查詢

  • (二十)多表查詢 WhereCascade

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

  • (二十二)Dto 映射查詢

  • (二十三)分組、聚合

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

  • (二十五)延時加載

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

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

  • (二十八)事務

  • (二十九)Lambda 表達式

  • (三十)讀寫分離

  • (三十一)分區分表

  • (三十二)Aop

  • (三十三)CodeFirst 類型映射

  • (三十四)CodeFirst 遷移說明

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

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447750.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447750.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447750.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

做什么運動可以排毒養顏

排毒養顏吃什么很重要&#xff0c;現在的社會污染這么嚴重&#xff0c;人體都置身于有毒的環境中&#xff0c;除了吃的排毒方法&#xff0c;還需要了解做什么運動可以排毒養顏。下面就來介紹幾個簡單的動作來排毒養顏。 方法/步驟 赤腳走路可以增強體質&#xff0c;足底有許多和…

FreeSql (十九)多表查詢

多表查詢&#xff0c;常用的有聯表 LeftJoin/InnerJoin/RightJoin &#xff0c;這三個方法在上篇文章已經介紹過。 除了聯表&#xff0c;還有子查詢 Where Exists&#xff0c;和 Select 子表&#xff1a; IFreeSql fsql new FreeSql.FreeSqlBuilder().UseConnectionString(Fre…

docker啟動,重啟,關閉命令

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 --------------------- 轉自&#xff1a;https://blog.csdn.net/easternunbeaten/article/details/80463837

車禍是怎么發生的 不論你是否開車都該看看!

【導讀】 雖然有越來越多的人拿到了駕照&#xff0c;但是全國仍有10億多人不會開車&#xff0c;本文寫給所有不會開車的人&#xff1a; 我作為一個曾經也不會開車的人&#xff0c;我也曾認為開車的不敢撞人&#xff0c;所以過馬路都非常大膽…… 確實!沒有司機敢撞人!不可能有哪…

FreeSql (二十)多表查詢 WhereCascade

WhereCascade 多表查詢時非常方便&#xff0c;有了它可以很輕松的完成類型軟刪除&#xff0c;租戶條件的功能。 IFreeSql fsql new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, "Data Source127.0.0.1;Port3306;User IDroot;Passwordroot;Ini…

注解 @Deprecated、@deprecated 的使用、說明

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 今天偶然在項目中注意到一個注解&#xff1a;Deprecated 1. 說明&#xff1a; Deprecated 表示此方法已廢棄、暫時可用&#xff0c;但…

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

FreeSql 采用 ExpressionTree 優化讀取速讀&#xff0c;如果懂技術的你一定知道 .NETCore 技術下除了原生代碼&#xff0c;最快就是 Emit 和 ExpressionTree。 項目在初期使用的反射緩存&#xff0c;雖然 .NETCore 優化了反射性能&#xff0c;但經過與Dapper性能測試對比之后&a…

十二個生活習慣,增加你的心靈壓力

隨著生活節奏的加快&#xff0c;很多人抱怨壓力越來越大。美國《赫芬頓郵報》近日載文指出&#xff0c;一些壓力是外在壓力&#xff0c;而更多的壓力來自我們自身。以下就是在不知不覺中增加自身壓力的習慣。 忘記每日大笑 如果你想不起來上次捧腹大笑的時間&#xff0c;你就該…

VisualCode 查看代碼歷史版本、還原代碼到既定歷史版本

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我想要類似 eclipse 查看并還原代碼到既定歷史版本的效果。 1. 安裝插件&#xff1a;Local History &#xff0c;點擊右下角 Install 就…

FreeSql (二十二)Dto 映射查詢

適合喜歡使用 dto 的朋友&#xff0c;很多時候 entity 與 dto 屬性名相同&#xff0c;屬性數據又不完全一致。 有的人先查回所有字段數據&#xff0c;再使用 AutoMapper 映射。 我們的功能是先映射&#xff0c;再只查詢映射好的字段&#xff0c;節省了io性能。 Select<Tag&g…

會車有哪些要領?

科目三會車是路考中最簡單的一個環節&#xff0c;同樣&#xff0c;難免有學員在這項目上慘遭“滑鐵盧”。會車原則1、會車時&#xff0c;必須注意保持足夠的安全側向間距。2、一般情況下的會車&#xff0c;空車讓重車&#xff0c;單車讓拖掛貨車&#xff0c;大車讓小車&#xf…

解決 cp: omitting directory ‘./dist’ ( 拷貝失敗 )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 我有一個腳本部署vue的前端工程。其中有一行&#xff1a; cp ./dist /usr/local/dist/gentle 運行報錯如題。 2. 原因&#xff1a…

科目三要注意的失誤點

科目三是最關鍵的一項考試&#xff0c;也是最容易失分的&#xff0c;那么在考試中又要注意哪些失誤點呢&#xff1f;1.起步時車輛發生闖動&#xff0c;油門與剎車配合不好被扣分&#xff0c;占扣分次數總和的9%&#xff1b;2.方向控制不穩&#xff0c;不能保持車輛直線運動狀態…

解決: cp -rf 命令中參數 -f 失效 ( 依舊要手動確認 )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 運行 cp -rf 命令時依舊給出無數提示&#xff0c;要求確認&#xff0c;很是麻煩&#xff0c;如下圖&#xff1a; 2. 可能原因&#…

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

原本不支持 IQueryable 主要出于使用習慣的考慮&#xff0c;如果繼承 IQueryable&#xff0c;編寫代碼的智能總會提示出現一堆你不想使用的方法&#xff08;對不起&#xff0c;我有強迫癥&#xff09;&#xff0c;IQueryable 自身提供了一堆沒法實現的方法&#xff0c;還有外部…

科目三路考需準備事項

科目三是技術性較強的一項&#xff0c;對于科目三我們有更多要準備的東西了&#xff0c;那我們應該準備一些什么&#xff1f;接下來學車啦小編指導新手們路考上車準備事項&#xff1a; 上車準備一 1、環視車輛、確保安全。 2、調整駕駛座。身體坐正&#xff0c;雙手向前伸直&am…

前后端分離工程實現 (VUE、JAVA)、附全部源碼

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 整個工程基本情況簡述&#xff1a; 前端工程語言&#xff1a;vue &#xff08;node.js&#xff09; 后端工程語言&#xff1a;java…

FreeSql (二十五)延時加載

FreeSql 支持導航屬性延時加載&#xff0c;即當我們需要用到的時候才進行加載&#xff08;讀取&#xff09;&#xff0c;支持1對1、多對1、1對多、多對多關系的導航屬性。 當我們希望瀏覽某條訂單信息的時候&#xff0c;才顯示其對應的訂單詳細記錄時&#xff0c;我們希望使用延…

聊聊并發——生產者消費者模式

在并發編程中使用生產者和消費者模式能夠解決絕大多數并發問題。該模式通過平衡生產線程和消費線程的工作能力來提高程序的整體處理數據的速度。 為什么要使用生產者和消費者模式 在線程世界里&#xff0c;生產者就是生產數據的線程&#xff0c;消費者就是消費數據的線程。在…

多個 VUE 前端工程部署設置、nginx 代理配置

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 PS&#xff1a;早期 我只有一個 VUE 前端工程&#xff1a;gentle-vue &#xff0c;加一個 java 后端工程&#xff1a;gentle &#xff0…