Dapper是一种轻量级的ORM(对象关系映射)工具,它提供了高效且易于使用的方式来执行数据库操作。
Dapper是由Stack Overflow团队开发并维护的,它的主要目标是提供比EF更快、更直接的方式访问数据库。
Dapper的主要特点包括:
基于纯ADO.NET而不是EF,因此性能更高
支持多种数据库,如SQL Server、MySQL、Oracle等
通过使用动态SQL和强类型参数,可以有效地减少代码量
提供了多种简单易用的方法,在大多数情况下,只需一两行代码就可以完成常见的CRUD操作
接下来,我们将详细介绍如何使用Dapper进行数据库操作。

一、安装Dapper:

       Dapper可以通过NuGet包管理器安装。打开Visual Studio,选择“项目”菜单下的“管理NuGet程序包”,在搜索栏中输入“Dapper”,然后点击“安装”按钮即可。
       你也可以手动在项目中添加以下引用:

using Dapper;
using System.Data.SqlClient;
View Code

二、连接数据库
     在使用Dapper之前,我们需要先连接数据库。Dapper支持多种数据库,本文以SQL Server为例。
     创建一个 SqlConnection 对象,然后使用该对象打开数据库连接。

string connectionString = "your connection string";
using (var connection = new SqlConnection(connectionString))
{
    connection.Open();
    // 这里执行数据库操作
}
View Code

三、执行查询操作
     Dapper提供了多种方法来执行查询操作。其中,最常见的方法是 Query 和 QueryFirstOrDefault。
     Query
     Query 方法返回一个包含查询结果的 IEnumerable<T>(T为查询结果映射的类型)。

var products = connection.Query<Product>("SELECT * FROM Products");
foreach (var product in products)
{
    // 处理查询结果
}
View Code

     如果你需要使用参数化查询,可以像下面这样使用命名参数:

var products = connection.Query<Product>("SELECT * FROM Products WHERE CategoryId = @CategoryId", new { CategoryId = 1 });
foreach (var product in products)
{
    // 处理查询结果
}
View Code

     或者使用匿名对象:

var parameters = new { CategoryId = 1 };
var products = connection.Query<Product>("SELECT * FROM Products WHERE CategoryId = @CategoryId", parameters);
foreach (var product in products)
{
    // 处理查询结果
}
View Code

    QueryFirstOrDefault 

    QueryFirstOrDefault 方法返回一个单个实体对象,如果未找到任何记录,则返回 null。

var product = connection.QueryFirstOrDefault<Product>("SELECT * FROM Products WHERE Id = @Id", new { Id = 1 });
if (product != null)
{
    // 处理查询结果
}
View Code

    QueryMultiple
    如果你需要一次性执行多个查询语句,可以使用 QueryMultiple 方法。该方法返回一个 SqlMapper.GridReader 对象,通过该对象可以依次获取各个查询语句的结果。
    以下示例中,我们首先执行两个查询语句,获取商品和商品分类的数据。然后,我们使用 Read 方法分别获取这两个结果集,并将它们转换为实体对象列表。

var multi = connection.QueryMultiple("SELECT * FROM Products; SELECT * FROM Categories");
var products = multi.Read<Product>().ToList();
var categories = multi.Read<Category>().ToList();
View Code

四、执行插入、更新和删除操作
      Dapper还提供了多种方法来执行插入、更新和删除操作。其中,最常见的方法是 Execute 和 ExecuteScalar。
      Execute
      Execute 方法返回受影响行数。

var rowsAffected = connection.Execute("INSERT INTO Products (Name, Price) VALUES (@Name, @Price)", new { Name = "Product 1", Price = 9.99m });
View Code

     你也可以使用命名参数或匿名对象:

var parameters = new { Name = "Product 1", Price = 9.99m };
var rowsAffected = connection.Execute("INSERT INTO Products (Name, Price) VALUES (@Name, @Price)", parameters);
View Code


     ExecuteScalar
     ExecuteScalar方法返回一个单一的值,通常用于执行插入操作并返回插入记录的主键。

var productId = connection.ExecuteScalar<int>("INSERT INTO Products (Name, Price) VALUES (@Name, @Price); SELECT CAST(SCOPE_IDENTITY() as int)", new { Name = "Product 2", Price = 19.99m });
View Code

    与 Query 和 Execute 方法一样,你也可以使用命名参数或匿名对象。
对象映射
    Dapper支持自动将查询结果映射到实体对象上。在使用Dapper时,我们需要确保查询语句中的列名与实体类的属性名相对应。
    以下是一个简单的示例:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

// 查询商品数据
var products = connection.Query<Product>("SELECT Id, Name, Price FROM Products");
View Code

     注意,如果查询语句中的列名与实体类的属性名不匹配,则无法自动映射。此时,你需要手动指定映射关系。
     以下是一个手动映射的示例:

public class Product
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public decimal ProductPrice { get; set; }
}

// 查询商品数据
var products = connection.Query<Product>("SELECT Id as ProductId, Name as ProductName, Price as ProductPrice FROM Products");
View Code

 总结
      Dapper是一种简单易用、高效的ORM工具,它提供了多种方法来执行数据库操作,能够满足大多数开发人员的需求。在使用Dapper时,我们需要先连接数据库,然后使用 Query、QueryFirstOrDefault、QueryMultiple、Execute 或 ExecuteScalar 等方法执行相应的数据库          操作。同时,Dapper还支持自动将查询结果映射到实体对象上,从而进一步简化了代码编写。