Dapper的擴展這個你知道嘛?


 之前寫的ORM對比文章中,我選Dapper作為底層ADO的基礎訪問框架后,我對此再次進行進一步的深入研究,發現里面還有延伸了一些好用的擴展方法和特性,那我便簡單的跟大家說一下特性標簽。

一、TableAttribute 特性

  這個先對簡單,就是對模型進行定義表名,如果你未標注表名特性,默認去模型類型名稱,並且此特性只能標注在類上,不能標注在屬性,方法等其它作用體上;

二、KeyAttribute [隱式]主鍵特性

  為什么我把它定義隱式呢,關鍵在於在Insert時,如果你用它標記了一個屬性,那這個屬性的值無法對應插入到數據表里,比較適合自增類型主鍵和數據庫默認有賦值的主鍵字段

  代碼模擬:  

    [Table("Person")]
    public class Person
    {
        [Key]
        public Guid ID { get; set; }
        public string Name { get; set; }
    
public byte Age { get; set; } }
  //最終的腳本是:INSERT INTO [
Person] (Name,Age) VALUES (@Name,@Age)

 三、ExplicitKeyAttribute [顯式]主鍵特性

  我之前也比較納悶怎么需要定義兩種KEY特性,在嘗試DEMO后,就發現這個是可以作用在Insert上進行主鍵值插入

  代碼模擬:

    [Table("Person")]
    public class Person
    {
        [ExplicitKey]
        public Guid ID { get; set; }
        public string Name { get; set; }
     public byte Age { get; set; }
    }
  //最終的腳本是:INSERT INTO [Person] (ID,Name,Age) VALUES (@ID,@Name,@Age)

四、WriteAttribute 可寫特性

  最簡單的理解,如果在屬性上這么標注:Write(false),表明不可寫入,包括:Insert和Update,這個我就不貼代碼了,很好理解

五、ComputedAttribute 已計算過特性

  單詞理解上我覺得就是表明這個屬性值是自己計算,不參與任何Insert和Update,但可從數據表讀取數據,所以如果在屬性上標記這個將無法進行寫入和更新值

以上的擴展特性在項目:Dapper.Contrib上,大家在使用的的時候注意引用,此項目也是寫Dapper的開發者編寫的,請配合擴展方法:Get<T>,GetAll<T>, Insert<T>,Update<T>,Delete<T>,DeleteAll<T>

以上如果有不對的地方,請多多指出!


免責聲明!

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



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