# 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)