Tối ưu Truy vấn Cơ sở Dữ liệu với Dapper: Khám phá Khả năng và Kỹ thuật

Trong phát triển ứng dụng .NET, việc truy cập cơ sở dữ liệu cần cân bằng giữa hiệu năng và tính dễ sử dụng. Dapper, framework ORM tối giản do đội ngũ Stack Overflow xây dựng, cung cấp tốc độ gần bằng ADO.NET gốc với API đơn giản, giúp loại bỏ rào cản của các ORM toàn diện.

Ưu điểm chính của Dapper

  • Hiệu năng tối đa: Tận dụng cơ chế sinh phương thức động và bộ nhớ đệm
  • Thiết kế trực quan: Chỉ cần 3-5 dòng code cho thao tác cơ bản
  • Kiểm soát SQL tuyệt đối: Tránh truy vấn phức tạp tự sinh

Bắt đầu với Dapper

dotnet add package Dapper

Ví dụ truy vấn cơ bản

using var conn = new SqlConnection(dbConnection); var records = conn.Query<Item>( "SELECT Id, Title FROM Catalog WHERE Category = @cat", new { cat = "Electronics" } ).ToList();

Quản lý tham số và giao dịch

using var tx = conn.BeginTransaction(); try { conn.Execute( "INSERT INTO Inventory (ItemCode, Stock) VALUES (@code, @qty)", new { code = "ITEM_101", qty = 50 }, tx ); conn.Execute( "UPDATE Stocks SET Available = Available - @qty", new { qty = 50 }, tx ); tx.Commit(); } catch { tx.Rollback(); throw; }

Tối ưu hiệu năng

  • Quản lý kết nối: Tái sử dụng SqlConnection trong chu kỳ sống ứng dụng
  • Thao tác hàng loạt: Sử dụng Execute cho nhiều bản ghi
  • Chế độ bất đồng bộ: Dùng QueryAsync/ExecuteAsync cho xử lý song song
Tiêu chí Dapper Entity Framework
Hiệu năng ⭐⭐⭐⭐⭐ ⭐⭐⭐
Độ phức tạp ⭐⭐ ⭐⭐⭐⭐
Điều khiển SQL ⭐⭐⭐⭐⭐ ⭐⭐

Tính năng nâng cao

Truy vấn đa kết quả

var results = conn.QueryMultiple( "SELECT * FROM Users WHERE ID = @id; SELECT * FROM Purchases WHERE UserID = @id", new { id = 1024 } ); var user = results.ReadSingle<UserProfile>(); var purchases = results.Read<Purchase>().ToList();

Định nghĩa ánh xạ tùy chỉnh

SqlMapper.SetTypeMap( typeof(ProductItem), new CustomPropertyTypeMap( typeof(ProductItem), (type, colName) => type.GetProperties() .FirstOrDefault(p => p.GetCustomAttribute<ColumnNameAttribute>() ?.Name == colName ) ) );

Câu hỏi thường gặp

Q: Dapper hỗ trợ cơ sở dữ liệu nào?
A: Tất cả hệ thống ADO.NET-compatible: SQL Server, MySQL, PostgreSQL, SQLite
Q: Làm sao xử lý truy vấn phức tạp?
A: Sử dụng QueryMultiple hoặc gọi trực tiếp stored procedures
Q: Có hỗ trợ bất đồng bộ không?
A: Có, bao gồm QueryAsync, ExecuteAsync

Thẻ: Dapper C# sql Async orm

Đăng vào ngày 5 tháng 8 lúc 04:34