经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
以SQLserver为例的Dapper详细讲解
来源:cnblogs  作者:大师兄117  时间:2023/4/26 8:52:23  对本文有异议

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

一、安装Dapper:

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

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

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

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

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

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

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

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

     或者使用匿名对象:

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

    QueryFirstOrDefault 

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

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

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

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

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

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

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

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


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

  1. 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时,我们需要确保查询语句中的列名与实体类的属性名相对应。
    以下是一个简单的示例:

  1. public class Product
  2. {
  3. public int Id { get; set; }
  4. public string Name { get; set; }
  5. public decimal Price { get; set; }
  6. }
  7. // 查询商品数据
  8. var products = connection.Query<Product>("SELECT Id, Name, Price FROM Products");
View Code

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

  1. public class Product
  2. {
  3. public int ProductId { get; set; }
  4. public string ProductName { get; set; }
  5. public decimal ProductPrice { get; set; }
  6. }
  7. // 查询商品数据
  8. 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还支持自动将查询结果映射到实体对象上,从而进一步简化了代码编写。

 

原文链接:https://www.cnblogs.com/wxsdyz/p/17348476.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号