導航屬性是 FreeSql 的特色功能之一,可通過約定配置、或自定義配置對象間的關系。
導航屬性有 OneToMany, ManyToOne, ManyToMany, OneToOne, Parent 五種配置關系。
有了導航屬性,多表查詢會非常方便,lambda 表達式中直接使用導航對象點點點,舒服?。?br>
除了查詢還有更多其他的特性在后續(xù)文章中再介紹。
自定義導航關系
//導航屬性,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 特性關聯(lián);
* 無關聯(lián)的,查詢時可以指明 On 條件,LeftJoin(a => a.Parent.Id == a.ParentId);
* 已關聯(lián)的,直接使用導航對象就行,On 條件會自動附上;
約定配置
OneToOne 一對一
class User { public int Id { get; set; } //Id、UserId、User_id public UserExt
UserExt { get; set; } } class UserExt { public int id { get; set; }
//Id、UserId、User_id、UserExtId、UserExt_id public User User { get; set; } }
《OneToOne 一對一,怎么添加數(shù)據?》 <https://github.com/2881099/FreeSql/issues/45>
ManyToOne 多對一
class Group { public int Id { get; set; } //Id、GroupId、Group_id } class User {
public int Id { get; set; } //Id、UserId、User_id public 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_id public
ICollection<User> AUsers { get; set; } public ICollection<User> BUsers { get;
set; } } class User { public int Id { get; set; } //Id、UserId、User_id public
int AGroupId { get; set; } public Group AGroup { get; set; } public int
BGroupId { get; set; } public Group BGroup { get; set; } }
《OneToMany 一對多,怎么添加數(shù)據?》 <https://github.com/2881099/FreeSql/issues/46>
Parent 父子
class Group { public int Id { get; set; } //Id、GroupId、Group_id public int
ParentId { get; set; } //ParentId、Parent_id public Group Parent { get; set; }
public ICollection<Group> Childs { get; set; } }
父子關系,與一對多其實差不多,添加數(shù)據參數(shù)上面的連接;
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種關系。
系列文章導航
*
(一)入門 <https://www.cnblogs.com/FreeSql/p/11531300.html>
*
(二)自動遷移實體 <https://www.cnblogs.com/FreeSql/p/11531301.html>
*
(三)實體特性 <https://www.cnblogs.com/FreeSql/p/11531302.html>
*
(四)實體特性 Fluent Api <https://www.cnblogs.com/FreeSql/p/11531304.html>
*
(五)插入數(shù)據 <https://www.cnblogs.com/FreeSql/p/11531306.html>
*
(六)批量插入數(shù)據 <https://www.cnblogs.com/FreeSql/p/11531309.html>
*
(七)插入數(shù)據時忽略列 <https://www.cnblogs.com/FreeSql/p/11531316.html>
*
(八)插入數(shù)據時指定列 <https://www.cnblogs.com/FreeSql/p/11531318.html>
*
(九)刪除數(shù)據 <https://www.cnblogs.com/FreeSql/p/11531320.html>
*
(十)更新數(shù)據 <https://www.cnblogs.com/FreeSql/p/11531321.html>
*
(十一)更新數(shù)據 Where <https://www.cnblogs.com/FreeSql/p/11531324.html>
*
(十二)更新數(shù)據時指定列 <https://www.cnblogs.com/FreeSql/p/11531327.html>
*
(十三)更新數(shù)據時忽略列 <https://www.cnblogs.com/FreeSql/p/11531334.html>
*
(十四)批量更新數(shù)據 <https://www.cnblogs.com/FreeSql/p/11531335.html>
*
(十五)查詢數(shù)據 <https://www.cnblogs.com/FreeSql/p/11531339.html>
*
(十六)分頁查詢 <https://www.cnblogs.com/FreeSql/p/11531341.html>
*
(十七)聯(lián)表查詢 <https://www.cnblogs.com/FreeSql/p/11531346.html>
*
(十八)導航屬性
*
(十九)多表查詢 <https://www.cnblogs.com/FreeSql/p/11531362.html>
*
(二十)多表查詢 WhereCascade <https://www.cnblogs.com/FreeSql/p/11531372.html>
*
(二十一)查詢返回數(shù)據 <https://www.cnblogs.com/FreeSql/p/11531376.html>
*
(二十二)Dto 映射查詢 <https://www.cnblogs.com/FreeSql/p/11531381.html>
*
(二十三)分組、聚合 <https://www.cnblogs.com/FreeSql/p/11531384.html>
*
(二十四)Linq To Sql 語法使用介紹 <https://www.cnblogs.com/FreeSql/p/11531392.html>
*
(二十五)延時加載 <https://www.cnblogs.com/FreeSql/p/11531395.html>
*
(二十六)貪婪加載 Include、IncludeMany、Dto、ToList
<https://www.cnblogs.com/FreeSql/p/11531404.html>
*
(二十七)將已寫好的 SQL 語句,與實體類映射進行二次查詢
<https://www.cnblogs.com/FreeSql/p/11531416.html>
*
(二十八)事務 <https://www.cnblogs.com/FreeSql/p/11531423.html>
*
(二十九)Lambda 表達式 <https://www.cnblogs.com/FreeSql/p/11531425.html>
*
(三十)讀寫分離 <https://www.cnblogs.com/FreeSql/p/11531430.html>
*
(三十一)分區(qū)分表 <https://www.cnblogs.com/FreeSql/p/11531435.html>
*
(三十二)Aop <https://www.cnblogs.com/FreeSql/p/11531471.html>
*
(三十三)CodeFirst 類型映射 <https://www.cnblogs.com/FreeSql/p/11531543.html>
*
(三十四)CodeFirst 遷移說明 <https://www.cnblogs.com/FreeSql/p/11531550.html>
*
(三十五)CodeFirst 自定義特性 <https://www.cnblogs.com/FreeSql/p/11531576.html>
熱門工具 換一換