FreeSql (十八)导航属性
導(dǎo)航屬性是 FreeSql 的特色功能之一,可通過約定配置、或自定義配置對(duì)象間的關(guān)系。
導(dǎo)航屬性有 OneToMany, ManyToOne, ManyToMany, OneToOne, Parent 五種配置關(guān)系。
有了導(dǎo)航屬性,多表查詢會(huì)非常方便,lambda 表達(dá)式中直接使用導(dǎo)航對(duì)象點(diǎn)點(diǎn)點(diǎn),舒服!!
除了查詢還有更多其他的特性在后續(xù)文章中再介紹。
自定義導(dǎo)航關(guān)系
//導(dǎo)航屬性,OneToMany [Navigate("song_id")] public virtual List<song_tag> Obj_song_tag { get; set; }//導(dǎo)航屬性,ManyToOne/OneToOne [Navigate("song_id")] public virtual Song Obj_song { get; set; }//導(dǎo)航屬性,ManyToMany [Navigate(ManyToMany = typeof(tag_song))] public virtual List<tag> tags { get; set; }- 可約定,可不約定;
- 不約定的,需指定 Navigate 特性關(guān)聯(lián);
- 無關(guān)聯(lián)的,查詢時(shí)可以指明 On 條件,LeftJoin(a => a.Parent.Id == a.ParentId);
- 已關(guān)聯(lián)的,直接使用導(dǎo)航對(duì)象就行,On 條件會(huì)自動(dòng)附上;
也可以使用 FluentApi 在外部設(shè)置導(dǎo)航關(guān)系:
fsql.CodeFirst.ConfigEntity<實(shí)體類>(a => a.Navigate(b => b.roles, null, typeof(多對(duì)多中間實(shí)體類)).Navigate(b => b.users, "uid") );優(yōu)先級(jí),特性 > FluentApi
約定配置
OneToOne 一對(duì)一
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 一對(duì)一,怎么添加數(shù)據(jù)?》
ManyToOne 多對(duì)一
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 一對(duì)多
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 一對(duì)多,怎么添加數(shù)據(jù)?》
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; } }父子關(guān)系,與一對(duì)多其實(shí)差不多,添加數(shù)據(jù)參數(shù)上面的連接;
ManyToMany 多對(duì)多
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,這三個(gè)實(shí)體使用了 OneToMany、ManyToOne、Parent、ManyToMany 4種關(guān)系。
系列文章導(dǎo)航
(一)入門
(二)自動(dòng)遷移實(shí)體
(三)實(shí)體特性
(四)實(shí)體特性 Fluent Api
(五)插入數(shù)據(jù)
(六)批量插入數(shù)據(jù)
(七)插入數(shù)據(jù)時(shí)忽略列
(八)插入數(shù)據(jù)時(shí)指定列
(九)刪除數(shù)據(jù)
(十)更新數(shù)據(jù)
(十一)更新數(shù)據(jù) Where
(十二)更新數(shù)據(jù)時(shí)指定列
(十三)更新數(shù)據(jù)時(shí)忽略列
(十四)批量更新數(shù)據(jù)
(十五)查詢數(shù)據(jù)
(十六)分頁查詢
(十七)聯(lián)表查詢
(十八)導(dǎo)航屬性
(十九)多表查詢
(二十)多表查詢 WhereCascade
(二十一)查詢返回?cái)?shù)據(jù)
(二十二)Dto 映射查詢
(二十三)分組、聚合
(二十四)Linq To Sql 語法使用介紹
(二十五)延時(shí)加載
(二十六)貪婪加載 Include、IncludeMany、Dto、ToList
(二十七)將已寫好的 SQL 語句,與實(shí)體類映射進(jìn)行二次查詢
(二十八)事務(wù)
(二十九)Lambda 表達(dá)式
(三十)讀寫分離
(三十一)分區(qū)分表
(三十二)Aop
(三十三)CodeFirst 類型映射
(三十四)CodeFirst 遷移說明
(三十五)CodeFirst 自定義特性
轉(zhuǎn)載于:https://www.cnblogs.com/FreeSql/p/11531352.html
總結(jié)
以上是生活随笔為你收集整理的FreeSql (十八)导航属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse maven工程 Miss
- 下一篇: ios学习Day3xiawu