项目背景
前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET、微软的EF、NH等。再跟经理讨论后,经理强调不要用Ef,NH做ORM,后期的sql优化不好做,公司也没有人对EF,Nh 等orm优化比较熟悉的。强调说的,我们的项目要做的得简单,可以使用ADO.NET 写原始的sql。但我自己还是喜欢ORM的,它可以提高数据访问层的开发。有一天,在订阅张善友 doNet跨平台微信公众号里,看到Dapper的推荐。了解之后,我自己喜欢喜欢Dapper,可以满足我这个项目的经理的要求,同时Dapper 对数据库的访问能做到Ado.net一样快。
下面的链接是Dapper 在github的地址 https://github.com/StackExchange/dapper-dot-net。
使用 Dapper 进行简单增删改查示例
1、首先根据数据库表定义实体对象, 这个工作完全可以使用T4、Nvelocity或者RazorEngine 写一个代码生成器根据数据库表对象自动生成数据库表实体对象。这里我自己根据表写了一个对象
1 [Table("UserRole")] 2 public class UserRoleDbEntity:DbEntityModelBase 3 { 4 [Description("用户编号,来自用户表")] 5 public int UserId 6 { 7 get; 8 set; 9 } 10 11 [Description("角色编号,来自于角色表")] 12 public int RoleId 13 { 14 get; 15 set; 16 } 17 /// <summary> 18 /// 备注:AuthorityEnum.AuthorityValue 的取值范围是根据 AuthorityEnum位运算 或 与 的结果集;不可随意赋值 19 /// </summary> 20 [Description("权限值")] 21 public int AuthorityValue { get; set; } 22 23 /// <summary> 24 /// 根据 AuthorityEnum 枚举值生成的描述 25 /// </summary> 26 [Description("权限描述")] 27 public string AuthorityDescription { get; set; } 28 } 29 30 /// <summary> 31 /// 所有DbEntityModel项目中的实体必须继承DbEntityModelBase或其子类,使用supperType模式控制共有子类的行为或者状态,此项目中的类根据数据库基本表或者视图保持基本一致 32 /// </summary> 33 public abstract class DbEntityModelBase 34 { 35 [Description("Guid标识")] 36 public string GuidMark 37 { 38 get; 39 set; 40 } 41 [Description("自增Id列")] 42 public int Id 43 { 44 get; 45 set; 46 } 47 [Description("排序,倒序")] 48 public int Sort 49 { 50 get; 51 set; 52 } 53 }