[LINQ2Dapper]最完整Dapper To Linq框架(三)---實體類關系映射


此特性需要安裝Kogel.Dapper.Mssql或者Oracle 3.06及以上版本,實體類層需要安裝Kogel.Dapper.Extension 3.06及以上版本

目錄

 

1.實體類和數據庫關系映射特性

1.[Identity]可以標識主鍵

  [Identity]
  public int id { get; set; }

Identity內還可以使用IsIncrease指定字符串是否是自增,來判斷插入語句是否需要給該字段賦值 

    [Identity(IsIncrease =true)]  //默認為true,是自增
     public int Id { get; set; }

2.實體類名稱和數據庫表名不一致,或者屬性名稱和字段不一致

可以使用 [Display(Rename = "名稱")] 特性標識

[Display(Rename = "users")]
    public class testusers 
    {
        [Display(Rename ="Content")]
        public string testName222 { get; set; }
    }

Rename填寫數據庫對應的表名或者字段名稱,用來映射表關系

執行效果

查詢時需要使用 FieldMatch<實體類>() 函數匹配映射實體類(3.1.8.5版本后不需要)

 

 3.Display使用AsName區別同表之間的關系

假設同一條表達式語句中查詢了兩次A表,這時使用where條件 Where<A>可能無法指定到底是判斷哪張A表,

這時就需要使用AsName

[Display(AsName ="commm1")]
    public class Comment:IBaseEntity<int>
    {
        [Identity(IsIncrease =true)]
        public int Id { get; set; }
    }
//繼承同表,設置表名稱
[Display(AsName = "commm2",Rename = "Comment")]
  public class Comment1 : Comment
    {

    }

現在表達式如果需要判斷第二個A表的條件就可以直接使用

表達式.Where<Comment1>(條件)來判斷了,匿名類型返回字段和連表查詢時都可以用到來避免沖突。

 

4.非表映射關系

可以使用   [Display(IsField = false)] 特性標識

框架隱射時就會排除該字段

 

2.使用原生Dapper是否可以用Kogel.Dapper的特性標識

目前支持原生Dapper的特性只有[Display(Rename = "名稱")]

不過用法有點差別,需要先執行FieldMatch<T>()方法

 然后實體類

 

 這個FieldMatch函數是注冊全局的,所以只需要執行一次

然后查看效果,字段“test111”的值變成了Rename指向“Content”的值

 

3.實體類預加載

        在系統啟動時可以使用 EntityCache.Register 注冊實體類到內存中,后續表達式不會在重復反射實體類,減少反射時間,提升性能

 

此方法有三個重載

1.Register(Type type)

例如

EntityCache.Register(typeof("實體類"));

  

2.Register(Type []type)

可以通過反射獲取實體類類型數組

3.Register(string assemblyString)

assemblyString:通過給定程序集的長格式名稱加載程序集。

例如

EntityCache.Register("實體類層的類庫名稱");

  

完整Demo可以去Github上下載:

https://github.com/a935368322/Kogel.Dapper.Test

如有問題也可以加QQ群討論:

技術群 710217654

框架開源,可以加群下載源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM