轻量级的ORM(对象关系映射)框架 之 Dapper

12 篇文章 0 订阅

Dapper 是一个轻量级的ORM(对象关系映射)框架,与Entity Framework不同,它更加轻量、快速且易于使用。Dapper 是一个微型ORM库,它直接通过扩展方法在IDbConnection接口上工作。Dapper没有Entity Framework那样丰富的功能,但在性能和易用性上有很大的优势,特别是在需要高效数据访问的场景下。

目录

主要功能

使用步骤

示例项目

1. 安装Dapper

2. 创建模型类

3. 配置数据库连接

4. 执行数据库操作

高级特性

1. 参数化查询

2. 多对多关系

3. 存储过程

4. 异步操作

总结


主要功能

  1. 轻量级:相比其他ORM框架,Dapper更加轻量,不会产生额外的复杂性。
  2. 性能高效:因为Dapper不做复杂的对象跟踪等操作,所以性能非常高效。
  3. 简单易用:通过简单的扩展方法来执行SQL查询,插入、更新和删除操作。

使用步骤

安装Dapper

使用NuGet包管理器安装Dapper:

Install-Package Dapper

建立数据库连接

使用IDbConnection接口来建立数据库连接。

执行CRUD操作

使用Dapper的扩展方法来执行SQL查询和命令。

示例项目

1. 安装Dapper

通过NuGet包管理器控制台安装Dapper:

Install-Package Dapper
2. 创建模型类

创建一个简单的模型类,比如Student类:

public class Student
{
    public int StudentId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime EnrollmentDate { get; set; }
}
3. 配置数据库连接

在你的应用程序中配置数据库连接字符串,例如在App.configWeb.config文件中:

<configuration>
  <connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=SchoolDB;Integrated Security=True" 
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
4. 执行数据库操作

在程序中使用Dapper来执行CRUD操作,例如添加、读取、更新和删除学生记录:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using Dapper;

class Program
{
    static void Main(string[] args)
    {
        string connectionString = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=SchoolDB;Integrated Security=True";

        using (IDbConnection db = new SqlConnection(connectionString))
        {
            // 插入新学生
            var insertQuery = "INSERT INTO Students (FirstName, LastName, EnrollmentDate) VALUES (@FirstName, @LastName, @EnrollmentDate)";
            var student = new Student
            {
                FirstName = "John",
                LastName = "Doe",
                EnrollmentDate = DateTime.Now
            };
            db.Execute(insertQuery, student);

            // 读取学生数据
            var selectQuery = "SELECT * FROM Students";
            var students = db.Query<Student>(selectQuery).ToList();
            foreach (var s in students)
            {
                Console.WriteLine($"{s.FirstName} {s.LastName}");
            }

            // 更新学生数据
            var updateQuery = "UPDATE Students SET FirstName = @FirstName WHERE StudentId = @StudentId";
            var studentToUpdate = students.FirstOrDefault();
            if (studentToUpdate != null)
            {
                studentToUpdate.FirstName = "Jane";
                db.Execute(updateQuery, studentToUpdate);
            }

            // 删除学生数据
            var deleteQuery = "DELETE FROM Students WHERE StudentId = @StudentId";
            var studentToDelete = students.FirstOrDefault();
            if (studentToDelete != null)
            {
                db.Execute(deleteQuery, new { studentToDelete.StudentId });
            }
        }
    }
}

高级特性

1. 参数化查询

Dapper使用参数化查询来防止SQL注入攻击。在SQL语句中使用参数占位符,然后将参数作为匿名对象传递给Execute或Query方法。

 
string query = "SELECT * FROM Students WHERE LastName = @LastName";
var students = db.Query<Student>(query, new { LastName = "Doe" }).ToList();

2. 多对多关系

虽然Dapper不提供复杂的关系映射功能,但你可以手动处理多对多关系。例如,假设你有一个Course类和一个中间表StudentCourses来表示学生和课程之间的多对多关系,你可以手动执行查询并进行数据处理。

3. 存储过程

Dapper可以轻松地调用存储过程,并将结果映射到对象。

var students = db.Query<Student>("GetStudents", commandType: CommandType.StoredProcedure).ToList();
4. 异步操作

Dapper也支持异步操作,可以使用ExecuteAsyncQueryAsync方法。

public async Task<IEnumerable<Student>> GetStudentsAsync()
{
    using (IDbConnection db = new SqlConnection(connectionString))
    {
        string query = "SELECT * FROM Students";
        return await db.QueryAsync<Student>(query);
    }
}

总结

Dapper 是一个轻量级且高效的ORM框架,非常适合需要快速高效数据访问的场景。它提供了简单易用的API,支持参数化查询、存储过程和异步操作等功能。虽然它没有Entity Framework那样丰富的功能,但在性能和灵活性上有很大的优势。通过Dapper,开发者可以在保持高性能的同时简化数据访问层的代码。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战族狼魂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值