Sử dụng Dapper trong truy vấn dữ liệu

Ngày đăng: 29 - 03 - 2021 Lượt xem: 754 lượt

Khi làm việc với CSDL, ngoài Entity Framework chúng ta có thể sử dụng 1 thư viện hỗ trợ thực thi các câu lệnh SQL đó là Dapper.

truy vấn dữ liệu với dapper

Giới thiệu Dapper

Dapper là 1 một phần mở rộng của interface IDbConnection. Vì vậy, ta có thể dùng trực tiếp dapper với các đối tượng của ADO.NET như Connection, Command, …

Lợi ích của Dapper

  • Có thể nói, Dapper có tốt độ và hiệu năng cao hơn rất nhiều Entity Framework. Lý do là vì ta viết trực tiếp câu lệnh SQL và có thể tối ưu khi cần thiết.
  • Dapper hỗ trợ Transaction.
  • Dapper chống SQL Injections hiệu quả.
  • Dapper hỗ trợ mapping kết quả trả về từ câu truy vấn vào 1 đối tượng cụ thể, điều mà ADO.NET không làm được.

Một số đoạn code mẫu

Thực thi lệnh thao tác dữ liệu:

  • Stored Procedure
  • INSERT statement
  • UPDATE statement
  • DELETE statement
string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
      var affectedRows = connection.Execute(sql, new {CustomerName = "Mark"});

      Console.WriteLine(affectedRows);
   
      var customer = connection.Query<Customer>("Select * FROM CUSTOMERS WHERE CustomerName = 'Mark'").ToList();
   
      FiddleHelper.WriteTable(customer);
}

Bạn có thể thử nghiệm tại địa chỉ: https://dotnetfiddle.net/P2uw27

Thực thi câu lệnh Query

  • Query
  • QueryFirst
  • QueryFirstOrDefault
  • QuerySingle
  • QuerySingleOrDefault
  • QueryMultiple
string sql = "SELECT TOP 10 * FROM OrderDetails";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
      var orderDetails = connection.Query<OrderDetail>(sql).ToList();
      
      FiddleHelper.WriteTable(orderDetails);
}

Ví dụ tại: https://dotnetfiddle.net/qTvEME

Tham số trong câu lệnh SQL

Dapper cho phép các tham số:

  • Anonymous
  • Dynamic
  • List
  • String
string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{

      var affectedRows = connection.Execute(sql, new {CustomerName = "Mark"});

      Console.WriteLine(affectedRows);
   
      var customer = connection.Query<Customer>("Select * FROM CUSTOMERS WHERE CustomerName = 'Mark'").ToList();
      
      FiddleHelper.WriteTable(customer);
}

Ví dụ chi tiết tại: https://dotnetfiddle.net/Z1iRIQ

Kết quả trả về từ Dapper

Dapper trả về các quả bằng các kiểu dữ liệu:

  • Anonymous
  • Strongly Typed
  • Multi-Mapping
  • Multi-Result
  • Multi-Type
string sql = "SELECT TOP 10 * FROM OrderDetails";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{   
      var orderDetails = connection.Query<OrderDetail>(sql).ToList();

      Console.WriteLine(orderDetails.Count);
      
      FiddleHelper.WriteTable(orderDetails);
}

Ví dụ: https://dotnetfiddle.net/dXZc0s

Video cài đặt Dapper trong .NET CORE

5 4 votes
Article Rating

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

Bài viết liên quan

0
Would love your thoughts, please comment.x
()
x