天天看點

Dapper擴充的主鍵自增與非自增

環境:

  • window10 x64
  • vs2022 企業版 17.0.0
  • .NET 6.0
  • Dapper 2.0.78
  • Dapper.Contrib 2.0.78

一、TableAttribute 特性

  這個先對簡單,就是對模型進行定義表名,如果你未标注表名特性,預設去模型類型名稱,并且此特性隻能标注在類上,不能标注在屬性,方法等其它作用體上。

二、KeyAttribute [隐式]主鍵特性

  為什麼我把它定義隐式呢,關鍵在于在Insert時,如果你用它标記了一個屬性,那這個屬性的值無法對應插入到資料表裡,比較适合自增類型主鍵和資料庫預設有指派的主鍵字段。

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

三、ExplicitKeyAttribute [顯式]主鍵特性

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

[Table("User")]
public class User
{
    [ExplicitKey]
    public Guid ID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}
//最終的腳本是:INSERT INTO [User] (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>