之前寫的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>
以上如果有不對的地方,請多多指出!