# ormapping-sample **Repository Path**: ymjake/ormapping-sample ## Basic Information - **Project Name**: ormapping-sample - **Description**: AspNetCore OR-Mapping(EntityFrameworkCore、Dapper)学习示例 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-18 - **Last Updated**: 2025-09-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: EFCore, dapper ## README # OR-Mapping Sample Project 一个展示不同 ORM 技术的示例项目,包含 Dapper 和 Entity Framework Core 的封装实现。 ## 🚀 项目概述 本项目提供了两种主流 ORM 技术的封装和最佳实践: - **Dapper**: 轻量级 ORM,提供高性能的数据访问 - **Entity Framework Core**: 功能完整的 ORM,支持 Code First 和数据库迁移 ## 📁 项目结构 ``` src/ ├── Orm.Dapper.Data/ # Dapper 封装库 │ ├── Configuration/ # 配置相关 │ ├── Factories/ # 连接工厂 │ ├── Hooks/ # 钩子和装饰器 │ └── Strategies/ # 数据库策略 ├── Orm.EntityFrameworkCore.Data/ # EF Core 数据访问层 ├── Orm.EntityFrameworkCore.Migrator/ # EF Core 迁移工具 └── Orm.Models.Shared/ # 共享模型 ``` ## 🎯 Dapper 封装特性 ### ✨ 核心功能 - **多数据库支持**: SQL Server, MySQL - **连接池管理**: 自动连接管理和释放 - **装饰器模式**: 日志记录和重试机制 - **依赖注入**: 完整的 DI 容器支持 - **异步支持**: 完整的异步/等待模式 - **性能监控**: SQL 执行时间跟踪 ### 🔧 快速开始 #### 1. 安装依赖 ```xml ``` #### 2. 配置服务 ```csharp // Program.cs using Orm.Dapper.Data; var builder = WebApplication.CreateBuilder(args); // SQL Server 配置 builder.Services.AddDapper(config => { config.UseSqlServer("Server=localhost;Database=MyDb;Trusted_Connection=true;") .EnableLogging() .EnabledRetry(); }); // MySQL 配置 builder.Services.AddDapper(config => { config.UseMySql("Server=localhost;Database=MyDb;Port=3306;User=root;Password=123456;") .EnableLogging() .EnabledRetry(); }); ``` #### 3. 使用连接工厂 ```csharp public class UserService { private readonly IDbConnectionFactory _connectionFactory; public UserService(IDbConnectionFactory connectionFactory) { _connectionFactory = connectionFactory; } public async Task GetUserAsync(int id) { using var connection = await _connectionFactory.CreateConnectionAsync(); return await connection.QueryFirstOrDefaultAsync( "SELECT * FROM Users WHERE Id = @Id", new { Id = id }); } } ``` ### 🎛️ 高级配置 #### 自定义日志配置 ```csharp builder.Services.AddDapper(config => { config.UseSqlServer(connectionString) .EnableLogging() .WithLogging(logConfig => { logConfig.WithLogLevel(LogLevel.Information) .WithSensitiveDataLogging() // 开发环境 .WithQueryMessage("🔍 SQL: {query}\n📋 参数: {params}\n⏱️ 耗时: {elapsed}ms") .WithConnectionProjector(conn => new { conn.Database, conn.DataSource, conn.State }); }) .EnabledRetry() .WithRetry(retry => { retry.RetryCount = 3; retry.RetryDelayMilliseconds = 1000; }); }); ``` #### 环境特定配置 ```csharp // 开发环境 if (builder.Environment.IsDevelopment()) { builder.Services.AddDapper(config => config.UseSqlServer(connectionString) .EnableLogging() .WithLogging(logConfig => { logConfig.WithLogLevel(LogLevel.Debug) .WithSensitiveDataLogging(); }) .EnabledRetry() .WithRetry(retry => { retry.RetryCount = 2; retry.RetryDelayMilliseconds = 500; })); } // 生产环境 else { builder.Services.AddDapper(config => config.UseSqlServer(connectionString) .EnableLogging() .WithLogging(logConfig => { logConfig.WithLogLevel(LogLevel.Warning); }) .EnabledRetry() .WithRetry(retry => { retry.RetryCount = 3; retry.RetryDelayMilliseconds = 1000; })); } ``` ## 🗄️ Entity Framework Core ### 特性 - **Code First**: 从模型生成数据库 - **数据库迁移**: 版本化的数据库架构管理 - **LINQ 支持**: 强类型查询 - **变更跟踪**: 自动检测实体变更 - **关系映射**: 复杂的实体关系支持 ### 快速开始 ```csharp // Program.cs builder.Services.AddDbContext(options => options.UseSqlServer(connectionString)); // 使用示例 public class UserService { private readonly ApplicationDbContext _context; public UserService(ApplicationDbContext context) { _context = context; } public async Task GetUserAsync(int id) { return await _context.Users .Include(u => u.Posts) .FirstOrDefaultAsync(u => u.Id == id); } } ``` ## 📊 性能对比 | 特性 | Dapper | EF Core | |------|--------|---------| | 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | | 易用性 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | | 灵活性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | | 学习曲线 | ⭐⭐⭐⭐ | ⭐⭐ | | SQL 控制 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ## 🛠️ 开发工具 ### 数据库迁移 (EF Core) ```bash # 添加迁移 dotnet ef migrations add InitialCreate # 更新数据库 dotnet ef database update # 生成 SQL 脚本 dotnet ef migrations script ``` ### 日志输出示例 启用详细日志后的输出: ``` [14:30:15 INF] 🔍 SQL: SELECT * FROM Users WHERE Id = @Id 📋 参数: {"Id":123} ⏱️ 耗时: 8ms, context: Empty, connection: {"Database":"MyDb","DataSource":"localhost","State":"Open"} ``` ## 🏗️ 架构设计 ### 设计模式 - **工厂模式**: `IDbConnectionFactory` 和具体实现 - **装饰器模式**: `LoggingDbConnectionDecorator`, `RetryDbConnectionFactoryDecorator` - **策略模式**: 不同数据库的连接策略 - **建造者模式**: `DapperBuilder` 流畅配置 API ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📄 许可证 MIT License ## 🔗 相关链接 - [Dapper 官方文档](https://github.com/DapperLib/Dapper) - [Entity Framework Core 文档](https://docs.microsoft.com/en-us/ef/core/) - [.NET 依赖注入](https://docs.microsoft.com/en-us/dotnet/core/extensions/dependency-injection)