导航属性是 FreeSql 的特点功能之一,可经过约定配置、或自定义配置对象间的关系。html
导航属性有 OneToMany, ManyToOne, ManyToMany, OneToOne, Parent 五种配置关系。git
有了导航属性,多表查询会很是方便,lambda 表达式中直接使用导航对象点点点,舒服!!github
除了查询还有更多其余的特性在后续文章中再介绍。sql
//导航属性,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; }
也能够使用 FluentApi 在外部设置导航关系:ui
fsql.CodeFirst.ConfigEntity<实体类>(a => a .Navigate(b => b.roles, null, typeof(多对多中间实体类)) .Navigate(b => b.users, "uid") );
优先级,特性 > FluentApicode
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; } }
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; } }
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; } }
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; } }
父子关系,与一对多其实差很少,添加数据参数上面的链接;blog
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种关系。事务
(十八)导航属性