欢迎来到《FreeSql.Repository 仓储模式》系列文档,本系列文档专注介绍 【仓储+工作单元】 的使用方式。完整文档请前往 wiki 中心:https://github.com/dotnetcore/FreeSql/wiki

仓储模式推荐使用导航属性,配置好导航属性的仓储对象功能更加强大,多表查询、级联加载、级联保存。

导航属性有 OneToMany, ManyToOne, ManyToMany, OneToOne, Parent 五种配置关系。

自定义导航关系

//导航属性,OneToMany
[Navigate(nameof(song_tag.song_id))]public virtual List<song_tag> Obj_song_tag { get; set; }//在 song_tag 查找 song_id 属性,与 本实体.主键 关联//导航属性,ManyToOne/OneToOne
[Navigate(nameof(song_id))]public virtual Song Obj_song { get; set; }//在 本实体 查找 song_id 属性,与 Song.主键 关联//导航属性,ManyToMany
[Navigate(ManyToMany = typeof(tag_song))]public virtual List<tag> tags { get; set; }

也可以使用 FluentApi 在外部设置导航关系:

fsql.CodeFirst.ConfigEntity<实体类>(a => a
    .Navigate(b => b.roles, null, typeof(多对多中间实体类))
    .Navigate(b => b.users, "uid")
);

注意:

1、属性设置 Column(IsIgnore = true) 后,导航属性会失效

2、Navigate 设置的字符串是 类属性名,不是表 字段名!!!

检测有效性

如何检测一个导航属性是否配置生效:

var tbref = g.sqlite.CodeFirst
    .GetTableByEntity(typeof(T))
    .GetTableRef("Children", true);

GetTableRef(string propertyName, bool isThrow);