Advanced Dapper Usage in .NET Core
Advanced Dapper Usage in .NET Core
Dapper is a micro-ORM that provides powerful database
interaction capabilities in .NET Core applications. In this article, we’ll
explore advanced techniques, including executing stored procedures, handling
multiple result sets, and building dynamic queries.
Executing Stored Procedures with Dapper
Dapper makes it easy to execute stored procedures and map
results to C# objects.
Example: Calling a Stored Procedure
Assume we have a stored procedure GetEmployeeById that
retrieves employee details:
CREATE PROCEDURE GetEmployeeById
@Id INT
AS
BEGIN
SELECT * FROM
Employees WHERE Id = @Id;
END;
Using Dapper to Call the Stored Procedure
using (var connection = new
SqlConnection(_connectionString))
{
var employee =
connection.QuerySingleOrDefault<Employee>(
"GetEmployeeById", new { Id = 1 }, commandType:
CommandType.StoredProcedure);
Console.WriteLine(employee.Name);
}
Handling Multiple Result Sets with QueryMultiple
Dapper allows executing multiple queries in a single
database call and retrieving multiple result sets.
Example: Fetch Employee and Department Data Together
CREATE PROCEDURE GetEmployeeAndDepartment
@Id INT
AS
BEGIN
SELECT * FROM
Employees WHERE Id = @Id;
SELECT * FROM
Departments WHERE EmployeeId = @Id;
END;
Using QueryMultiple to Retrieve Multiple Result Sets
using (var connection = new
SqlConnection(_connectionString))
{
using (var multi =
connection.QueryMultiple("GetEmployeeAndDepartment", new { Id = 1 },
commandType: CommandType.StoredProcedure))
{
var employee =
multi.Read<Employee>().FirstOrDefault();
var
departments = multi.Read<Department>().ToList();
Console.WriteLine(employee.Name);
Console.WriteLine("Departments: " + string.Join(",
", departments.Select(d => d.Name)));
}
}
Building Dynamic SQL Queries at Runtime
Dapper supports constructing SQL queries dynamically for
flexible data retrieval.
Example: Dynamic WHERE Clause
public IEnumerable<Employee> GetEmployees(string
department = null, decimal? minSalary = null)
{
var query =
"SELECT * FROM Employees WHERE 1=1";
var parameters =
new DynamicParameters();
if
(!string.IsNullOrEmpty(department))
{
query +=
" AND Department = @Department";
parameters.Add("Department", department);
}
if
(minSalary.HasValue)
{
query +=
" AND Salary >= @MinSalary";
parameters.Add("MinSalary",
minSalary);
}
using (var
connection = new SqlConnection(_connectionString))
{
return
connection.Query<Employee>(query, parameters).ToList();
}
}
Conclusion
Dapper provides powerful database interaction capabilities beyond basic CRUD operations. Using stored procedures, handling multiple result sets, and dynamically constructing SQL queries enhances efficiency and flexibility in .NET Core applications.
Comments
Post a Comment