Dapper官方文档(一)【介绍】

Dapper是一个快速的对象关系映射器,专为.NET设计,能够与各种数据库提供商无缝协作。它通过扩展IDbConnection接口,提供了一系列用于执行数据库操作的方法,如Execute、Query等,几乎达到了原生ADO.NET数据读取器的速度。本文详细介绍了Dapper的安装、工作原理、参数使用及结果映射。

什么是Dapper

Dapper是一个简单的.NET对象映射器,在速度方面具有"King of Micro ORM"的头衔,几乎与使用原始的ADO.NET数据读取器一样快。ORM是一个对象关系映射器,它负责数据库和编程语言之间的映射。

Dapper通过扩展IDbConnection提供一些有用的扩展方法去查询您的数据库。

Dapper是如何工作的

它可以分为三个步骤:

  • 创建一个IDbConnection接口对象;
  • 编写一个查询SQL来执行CRUD操作;
  • 将查询SQL作为Execute方法的参数传递。

安装

Dapper通过NuGet安装:https://www.nuget.org/packages/Dapper

PM> Install-Package Dapper

要求

Dapper可以与任何数据库提供者一起工作,因为没有数据库特定的实现。

方法

Dapper会用以下几个方法扩展您的IDbConnection接口:

  • Execute
  • Query
  • QueryFirst
  • QueryFirstOrDefault
  • QuerySingle
  • QuerySingleOrDefault
  • QueryMultiple
string sqlInvoices = "SELECT * FROM Invoice;";
string sqlInvoice = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";
string sp = "EXEC Invoice_Insert";

using (var connection = My.ConnectionFactory())
{
        // 执行普通SQL
    var invoices = connection.Query<Invoice>(sqlInvoices).ToList();
    // 执行带参数的SQL
    var invoice = connection.QueryFirstOrDefault(sqlInvoice, new {InvoiceID = 1});
    // 执行存储过程 
    var affectedRows = connection.Execute(sp, new { Param1 = "Single_Insert_1" }, commandType: CommandType.StoredProcedure);
}

参数

执行和查询方法可以用以下几种不同的方式使用参数:

  • 匿名类型
  • 动态类型
  • 列表类型
  • 字符串类型
// Anonymous
var affectedRows = connection.Execute(sql,
                    new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
                    commandType: CommandType.StoredProcedure);

// Dynamic
DynamicParameters parameter = new DynamicParameters();

parameter.Add("@Kind", InvoiceKind.WebInvoice, DbType.Int32, ParameterDirection.Input);
parameter.Add("@Code", "Many_Insert_0", DbType.String, ParameterDirection.Input);
parameter.Add("@RowCount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

connection.Execute(sql,
    new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
    commandType: CommandType.StoredProcedure);

// List
connection.Query<Invoice>(sql, new {Kind = new[] {InvoiceKind.StoreInvoice, InvoiceKind.WebInvoice}}).ToList();

// String
connection.Query<Invoice>(sql, new {Code = new DbString {Value = "Invoice_1", IsFixedLength = false, Length = 9, IsAnsi = true}}).ToList();

结果

查询方法返回的结果可以映射到以下几种类型:

  • 匿名类型
  • 强类型
  • 多映射
  • 多结果
  • 多类型
string sql = "SELECT * FROM Invoice;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var anonymousList = connection.Query(sql).ToList();
    var invoices = connection.Query<Invoice>(sql).ToList();
}

工具

  • 异步
  • 缓冲
  • 事务
  • 存储过程
// Async
connection.QueryAsync<Invoice>(sql)

// Buffered
connection.Query<Invoice>(sql, buffered: false)

// Transaction
using (var transaction = connection.BeginTransaction())
{
    var affectedRows = connection.Execute(sql,
        new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
        commandType: CommandType.StoredProcedure,
        transaction: transaction);

    transaction.Commit();
}

// Stored Procedure
var affectedRows = connection.Execute(sql,
    new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
    commandType: CommandType.StoredProcedure);
05-09
### 关于 Dapper 的概述 Dapper种轻量级的对象关系映射工具 (ORM),专注于性能优化和简单易用的设计理念。它通过提供高效的查询执行能力以及对象到数据表之间的快速映射功能,在开发人员社区中广受欢迎[^2]。 #### 特性描述 Dapper 提供了些核心特性来支持高效的数据访问操作,其中包括但不限于以下几点: - **高性能**: 它能够显著减少 SQL 查询的执行时间并提高应用程序的整体效率。 - **简洁 API**: 开发者可以利用简单的接口完成复杂的数据库交互逻辑。 - **灵活扩展**: 支持多种场景下的自定义需求实现[^3]。 以下是基于 C# 编程语言的个基本例子展示如何使用 Dapper 进行 CRUD 操作: ```csharp using System; using System.Data.SqlClient; using Dapper; public class Program { static void Main(string[] args){ var connString = "your_connection_string"; using(var dbConnection=new SqlConnection(connString)){ // Insert Example int insertedId=dbConnection.Execute( @"INSERT INTO Accounts(Name,Address,Country,ShopId) VALUES(@Name,@Address,@Country,@ShopId);SELECT SCOPE_IDENTITY();", new{ Name="John Doe", Address="123 Street", Country="USA", ShopId=7} ); Console.WriteLine($"Inserted ID:{insertedId}"); // Query Single Record Example var account=dbConnection.QueryFirstOrDefault<Account>( @"SELECT * FROM Accounts WHERE Id=@id",new{id=insertedId}); if(account!=null){ Console.WriteLine($"{account.Name} lives at {account.Address}, from shop #{account.ShopId}"); } } } } // Define your model classes here. public class Account{ public int? Id { get; set;} public string Name {get;set;} public string Address {get;set;} public string Country {get;set;} public int ShopId {get; set;} } ``` 此代码片段展示了如何创建个新的 `Account` 记录并将该记录保存至数据库中;随后又演示了读取刚插入条目的过程[^4]。 ### 文档资源链接 对于更深入的学习资料或者官方文档地址如下所示: [Dapper Documentation](https://github.com/DapperLib/Dapper) 此外还可以查阅StackOverflow上的标签页面获取更多实用技巧与常见问题解答:[TheDapper Tag Wiki on Stack Overflow][so-dapper] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值