目前有关.NET(C#)的ORM组件也是不少了,比较成熟和之名的比如:ServiceStack.OrmLite,PetaPoco,NHibernate,Entity Framework,Dapper等等。今天我给大家推荐的是Dapper这款ORM。
Dapper是国外著名开发者社区Stackoverflow发布的一个开源ORM组件,Dapper是一个单文件组件,但在你的项目中必须实现IDbConnection接口。以下是一些用法举例:
Dapper同时也支持比如带参数查询,多对象映射,存储过程等,请点击此处了解更多
- 执行一个查询并把查询结果映射到一个强类型的集合
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);
注意:假定所有的扩展方法的数据库连接都是打开的,否则查询会失败 - 执行一个查询并把它映射到一个动态对象集合
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);
- 执行一个没有返回结果的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);
- 一条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"
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 |
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册