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