天天看點

FreeSql.Repository (六)導航屬性

歡迎來到《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);

系列文章導航

  • (一)什麼是倉儲
  • (二)如何使用倉儲
  • (三)實體特性
  • (四)工作單元
  • (五)狀态管理
  • (六)導航屬性
  • (七)多表查詢
  • (八)級聯加載
  • (九)級聯儲存
  • (十)動态實體類型
  • (十一)分表
  • (十二)如何擴充

繼續閱讀