Dapper ORM(对象关系映射器)
Dapper 是一个微型 ORM,支持执行原始 SQL 查询并将结果映射到 C# 对象和集合,它作为一组在 ADO.NET 接口之上的扩展方法实现IDbConnection,因此 ADO.NET 在使用时提供与 MySQL 数据库的连接小巧玲珑。
使用 Dapper 和 ADO.NET 在 C# 中连接到 MySQL
下面是示例 .NET 7 CRUD API 中的数据上下文类,该方法通过使用指定的连接字符串CreateConnection()创建 ADO.NET 类的新实例来连接到 MySQL 数据库。MySqlConnection()
该Init()方法创建 MySQL 数据库和表(如果它们不存在),它在 API 启动时执行一次。Dapper 扩展方法ExecuteAsync()用于执行 SQL 查询
namespace WebApi.Helpers;using System.Data;
using Dapper;
using Microsoft.Extensions.Options;
using MySql.Data.MySqlClient;public class DataContext
{private DbSettings _dbSettings;public DataContext(IOptions<DbSettings> dbSettings){_dbSettings = dbSettings.Value;}public IDbConnection CreateConnection(){var connectionString = $"Server={_dbSettings.Server}; Database={_dbSettings.Database}; Uid={_dbSettings.UserId}; Pwd={_dbSettings.Password};";return new MySqlConnection(connectionString);}public async Task Init(){await _initDatabase();await _initTables();}private async Task _initDatabase(){// create database if it doesn't existvar connectionString = $"Server={_dbSettings.Server}; Uid={_dbSettings.UserId}; Pwd={_dbSettings.Password};";using var connection = new MySqlConnection(connectionString);var sql = $"CREATE DATABASE IF NOT EXISTS `{_dbSettings.Database}`;";await connection.ExecuteAsync(sql);}private async Task _initTables(){// create tables if they don't existusing var connection = CreateConnection();await _initUsers();async Task _initUsers(){var sql = """CREATE TABLE IF NOT EXISTS Users (Id INT NOT NULL AUTO_INCREMENT,Title VARCHAR(255),FirstName VARCHAR(255),LastName VARCHAR(255),Email VARCHAR(255),Role INT,PasswordHash VARCHAR(255),PRIMARY KEY (Id));""";await connection.ExecuteAsync(sql);}}
}