【bob体育平台】Dapper - a simple object mapper for .Net

2019-12-12 23:52栏目:bob体育平台
TAG:

正文源自: 

本博客小编与Github上小编(cnxy卡塔尔(英语:State of Qatar)实为同八个作者。由于笔者翻译水平有限,文本中破绽超级多难免,应接指正!

 

特性


Dapper 是五个独立的文件,能够放进你的门类中用来增加你的IDbConnection接口.

它提供了七个助手:

本文内容

  • 特点
  • 性能
  • 参数化的查询
  • List 支持
  • 缓存和非缓存的 readers
  • 四个映射
  • 七个结实
  • 存款和储蓄进程
  • Ansi Strings 和 varchar
  • 约束和注意事项
  • Dapper 能运作在自家的 db 提供者上啊?
  • 有例子的总体例子列表吗?
  • 何人在使用 Dapper?
  • 参考

换工作了,新公司的数码库层,正确地说,数据库层和持久层使用 Dapper,那东西确实很有益于~个人认为这种方便性体以后三点:

  1. 能很平价地奉行数据库 DML 和 DLL 操作。举个例子,当您实践四个带参数的 SQL 时,SQL 中的变量能与你传递给它的实业或佚名对象中的属性,自定相称。而大家了解,带参数的 SQL,能增高数据库推行 SQL 的成效;
  2. 能很便利地将数据库检索结果映射为面向对象的对象。从数据库中的检索结果,平日是张二维表,如 DataTable,而应用程序中是实体类,以至实体类的成团,那么 Dapper 可以将 DataTable 自动地照耀成为实体类的集纳;
  3. 能很平价地挥毫 SQL 语句。举个例子,写多少个 SQL,用分号分隔。

正文翻译自:StackExchange.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;

下载 Demo

原版教程源自:Dapper Tutorial

施行一个询问,并将结果映射到三个动态类型集结中


该措施将实行SQL和重返一个动态集结。

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);

(该下载包涵 Dapper 项目,项目中有 Dapper 的测量试验示例和脾气测量试验例子)

汉语教程源自:中文Dapper教程.GitBook

进行一个命令,不回去结果


public static int Execute(this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null)

选拔例子:

connection.Execute(@"  set nocount on   create table #t   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);

(Dapper 的以身作则使用 SQLServer 数据库,小编个人的以身作则是 MySQL)

普通话教程PDF:dapper-tutorial-cn

数14遍执行一个下令


相通的占位符允许您方便有效的频仍施行二个命令.

选拔例子:

connection.Execute(@"insert MyTable(colA, colB) values ",    new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } }  ).IsEqualTo(3); // 3 行 被插入: "1,1", "2,2" and "3,3"

特点


Dapper 独有几个文书,你能够把它拖到你的品类中,来扩大你的 IDbConnection 接口。

它提供了三地点的支援:

Dapper - .Net版本的简便对象映射器

性能


Dapper的三个首要性情是性质。以下指标显示对数据库推行500次SELECT语句并重临数据映射到对象,需求多久。

天性测量检验分为八个表格:

  • POCO连串化框架扶助从数据库到静态类型化对象,通过运用原本的SQL。
  • 动态种类化框架匡助回到动态指标的列表。
  • 优秀的框架使用。平时标准框架使用分裂于最棒的使用品质明智。常常它不会涉及编写制定SQL。

施行一个询问,并把结果映射到四个强类型 list

留意:全体的扩张方法都假如数据库连接已开垦,倘若关闭连接,它们将战败。

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);

发行表明

请见 stackexchange.github.io/Dapper

500次查询映射的天性-POCO系列化

Method

Duration

Remarks

Hand coded (using aSqlDataReader)

47ms

Can be faster

DapperExecuteMapperQuery

49ms

ServiceStack.OrmLite(QueryById)

50ms

PetaPoco

52ms

BLToolkit

80ms

SubSonic CodingHorror

107ms

NHibernate SQL

104ms

Linq 2 SQLExecuteQuery

181ms

Entity frameworkExecuteStoreQuery

631ms

试行一个询问,并把结果映射到贰个动态 object 的 list

public static IEnumerable<dynamic> Query (this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null, bool buffered = true)

该措施将奉行 SQL,并赶回一个动态 list,即 var 变量。

用法:

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);

rows[0] 这种访问形式会出错,不亮堂示例是怎么给的~

组件

Nuget稳定版:

https://www.nuget.org/packages/Dapper

Visual Studio 程序包微型机调节台:

PM> Install-Package Dappe

特点

Dapper是一个NuGet库,您能够将其增加到项目中,以扩大您的IDbConnection接口。

它提供了3个使用办法:

500次询问映射的本性-动态类型连串化

Method

Duration

Remarks

DapperExecuteMapperQuery

48ms

Massive

52ms

Simple.Data

奉行三个不回去结果的 Command

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);

施行三个查询并将结果映射到强类型列表

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 });

Assert.Equal(1,dog.Count());
Assert.Null(dog.First().Age);
Assert.Equal(guid, dog.First().Id);

500次询问映射的性质-卓越框架使用

Method Duration Remarks
Linq 2 SQL CompiledQuery 81ms Not super typical involves complex code
NHibernate HQL 118ms
Linq 2 SQL 559ms
Entity framework 859ms
SubSonic ActiveRecord.SingleOrDefault 3619ms

几度推行二个 Command


同意气风发的具名也得以让你方便火速地对三个命令履行多次,举例批量加载数据(bulk-load data)。

用法:

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"

对别的项目实现 TIEnumerable 的参数都足以实践。

实践三个询问并将其映射到动态指标列表

public static IEnumerable<dynamic> Query (this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null, bool buffered = true)

以此方法会试行SQL语句,并回到二个动态列表。

示例:

var rows = connection.Query("select 1 A, 2 B union all select 3, 4");

Assert.Equal(1, (int)rows[0].A);
Assert.Equal(2, (int)rows[0].B);
Assert.Equal(3, (int)rows[1].A);
Assert.Equal(4, (int)rows[1].B);

参数化查询


参数字传送递佚名类。那允许你命名参数轻松和让你能够简单剪切和粘贴SQL代码片段在询问解析器和平运动作它们。

new {A = 1, B = "b"} // A 会被映射出参数 @A, B 对应 @B 

性能


Dapper 的首要性特点是性质。以下数据显示对四个数据库实践 SELECT 出 500 条,并把数据映射到对象中要求多长期。

特性测量试验分为八个地点:

  • POCO 体系化框架,支持从数据库拿到静态类型的目的。使用原有的 SQL。
  • 动态类别化框架,援救回到对象的动态列表。
  • 优良的框架用法。往往不会波及编写制定 SQL。

版权声明:本文由bob体育app发布于bob体育平台,转载请注明出处:【bob体育平台】Dapper - a simple object mapper for .Net