Dapper--.NET(C#)的一款高性能ORM组件

类库组件 2014-12-16 7596阅读 0评论 0收藏 收藏本文

目前有关.NET(C#)的ORM组件也是不少了,比较成熟和之名的比如:ServiceStack.OrmLite,PetaPoco,NHibernate,Entity Framework,Dapper等等。今天我给大家推荐的是Dapper这款ORM。 Dapper是国外著名开发者社区Stackoverflow发布的一个开源ORM组件,Dapper是一个单文件组件,但在你的项目中必须实现IDbConnection接口。以下是一些用法举例:

  1. 执行一个查询并把查询结果映射到一个强类型的集合
    public static IEnumerable<T> Query<T>(this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null, bool buffered = true)
    实例用法:
    public class Dog
    {
        public int? Age { get; set; }
        public Guid Id { get; set; }
        public string Name { get; set; }
        public float? Weight { get; set; }
    
        public int IgnoredProperty { get { return 1; } }
    }            
    
    var guid = Guid.NewGuid();
    var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });
    
    dog.Count()
        .IsEqualTo(1);
    
    dog.First().Age
        .IsNull();
    
    dog.First().Id
        .IsEqualTo(guid);
    注意:假定所有的扩展方法的数据库连接都是打开的,否则查询会失败
  2. 执行一个查询并把它映射到一个动态对象集合
    public static IEnumerable<dynamic> Query (this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null, bool buffered = true)
    实例用法:
    var rows = connection.Query("select 1 A, 2 B union all select 3, 4");
    
    ((int)rows[0].A)
       .IsEqualTo(1);
    
    ((int)rows[0].B)
       .IsEqualTo(2);
    
    ((int)rows[1].A)
       .IsEqualTo(3);
    
    ((int)rows[1].B)
        .IsEqualTo(4);
     
  3. 执行一个没有返回结果的SQL命令
    public static int Execute(this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null)
    实例用法:
    connection.Execute(@"
      set nocount on 
      create table #t(i int) 
      set nocount off 
      insert #t 
      select @a a union all select @b 
      set nocount on 
      drop table #t", new {a=1, b=2 })
       .IsEqualTo(2);
     
  4. 一条SQL命令执行多次,可用于批量插入数据的操作
    connection.Execute(@"insert MyTable(colA, colB) values (@a, @b)",
        new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } }
      ).IsEqualTo(3); // 3 rows inserted: "1,1", "2,2" and "3,3"
当然在性能方面,Dapper也是相当不错的,以下是Dapper官方对比其它ORM组件作出的性能测试结果报告(500次SELECT查询映射性能):
ORM 耗时 备注
Hand coded (using a SqlDataReader) 47ms Can be faster(还可以更快)
Dapper ExecuteMapperQuery 49ms
ServiceStack.OrmLite (QueryById) 50ms
PetaPoco 52ms
BLToolkit 80ms
SubSonic CodingHorror 107ms
NHibernate SQL 104ms
Linq 2 SQL ExecuteQuery 181ms
Entity framework ExecuteStoreQuery 631ms
Dapper同时也支持比如带参数查询,多对象映射,存储过程等,请点击此处了解更多

转载请注明:图享网 » Dapper--.NET(C#)的一款高性能ORM组件

文章评论

获取验证码