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

Popular posts from this blog

Multiline to singleline IN C# - CODING

EF Core interview questions for beginners

EF Core interview questions for experienced