DbRepository
🔥ORM framework, support databases: MySQL, MariaDB, TiDB, OceanBase, SQL Server, Oracle, SQLite, DuckDB, MS Access, Firebird, PostgreSql, OpenGauss, HighgoDB, IvorySQL, QuestDB, DB2, Informix, ClickHouse, 达梦, 人大金仓, 神通, 虚谷, ...
Install / Use
/learn @Sean-Lu/DbRepositoryREADME
🌈 简介
ORM框架,支持数据库:MySQL、MariaDB、TiDB、OceanBase、SQL Server、Oracle、SQLite、DuckDB、MS Access、Firebird、PostgreSql、OpenGauss、HighgoDB(瀚高)、IvorySQL、QuestDB、DB2、Informix、ClickHouse、Dameng(达梦)、KingbaseES(人大金仓)、ShenTong(神通)、Xugu(虚谷)
- 支持:
DbFirst、CodeFirst - 支持主从库分离(主库:增\删\改,从库:查)
- 支持分表(自定义表名规则)
- 支持
Expression表达式树解析:whereExpression、fieldExpression - 常用类:
| Class | Namespace | Description |
| -------------------------------------------------------------- | ------------------------------- | ------------------------------ |
| DbFactory | Sean.Core.DbRepository | 数据库工厂 |
| SqlFactory | Sean.Core.DbRepository | SQL创建工厂(CRUD) |
| BaseRepository<br>BaseRepository<TEntity> | Sean.Core.DbRepository | 基于DbFactory实现 |
| DapperBaseRepository<br>DapperBaseRepository<TEntity> | Sean.Core.DbRepository.Dapper | 基于DbFactory+Dapper实现 |
⭐ 开源
- GitHub: https://github.com/Sean-Lu/DbRepository
- Gitee: https://gitee.com/Sean-Lu/DbRepository
💖 Nuget Packages
| Package | NuGet Stable | NuGet Pre-release | Downloads |
| ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Sean.Core.DbRepository | |
|
|
| Sean.Core.DbRepository.Dapper |
|
|
|
🍉 数据库
CRUD Test:
TestRepository.csDbFirst:
CodeGeneratorFactoryCodeFirst:
SqlGeneratorFactory
| Database | CRUD Test | DbFirst | CodeFirst | Description |
| ------------ | --------- | ------- | --------- |------------ |
| MySQL | ✅ | ✅ | ✅ | |
| MariaDB | ✅ | ✅ | ✅ | |
| TiDB | ✅ | ✅ | ✅ | |
| OceanBase | ✅ | ✅ | ✅ | |
| SQL Server | ✅ | ✅ | ✅ | |
| Oracle | ✅ | ✅ | ✅ | |
| SQLite | ✅ | ✅ | ✅ | |
| DuckDB | ✅ | ✅ | ✅ | |
| MS Access | ✅ | ✅ | ✅ | |
| Firebird | ✅ | ✅ | ✅ | |
| PostgreSql | ✅ | ✅ | ✅ | |
| OpenGauss | ✅ | ✅ | ✅ | |
| HighgoDB | ✅ | ✅ | ✅ | 瀚高数据库 |
| IvorySQL | ✅ | ✅ | ✅ | |
| QuestDB | ✅ | | ✅ | |
| DB2 | ✅ | | ✅ | |
| Informix | ✅ | | ✅ | |
| ClickHouse | ✅ | | ✅ | |
| Dameng | ✅ | ✅ | ✅ | 达梦 |
| KingbaseES | ✅ | | ✅ | 人大金仓 |
| ShenTong | ✅ | | ✅ | 神通数据库 |
| Xugu | ✅ | | ✅ | 虚谷数据库 |
💯 性能测试
Dapper的Execute方法执行插入批量实体数据的本质是一条一条的插入,当数据量非常大时会很慢,可以分批把多条实体数据拼成一条脚本一次性执行(BulkInsert)。
- 以下测试结果来自单元测试:
PerformanceComparisonTest.CompareBulkInsertTimeConsumed - 测试数据库:MySQL 8.0.27
- 测试表:Test
- 测试时间:2023-02-07 15:00:00
| Operation | 50 Entities | 200 Entities | 1000 Entities | 2000 Entities | 5000 Entities |
| ---------------- | ----------- | ------------ | -------------- | -------------- | -------------- |
| Dapper.Execute | 318 ms | 1401 ms | 5875 ms | 11991 ms | 29968 ms |
| BulkInsert | 15 ms | 27 ms | 84 ms | 176 ms | 471 ms |
👉 使用示例
数据库连接字符串配置
.NET Framework:App.config、Web.config
- 配置示例:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<!-- 主库:如果配置了多个数据库,数据库名称后缀是以1开始的数字。 -->
<add name="master" connectionString="DataSource=127.0.0.1;Database=test;uid=root;pwd=12345!a" providerName="MySql.Data.MySqlClient"/>
<!-- 从库:如果配置了多个数据库,数据库名称后缀是以1开始的数字。 -->
<add name="secondary1" connectionString="DataSource=127.0.0.1;Database=test;uid=root;pwd=12345!a" providerName="MySql.Data.MySqlClient"/>
<add name="secondary2" connectionString="DataSource=127.0.0.1;Database=test;uid=root;pwd=12345!a" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
<appSettings>
</appSettings>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"/>
</DbProviderFactories>
</system.data>
</configuration>
.NET Core:appsettings.json
- 配置示例:可以通过设置
ProviderName或DatabaseType的值来指定数据库类型
{
"ConnectionStrings": {
// 主库:如果配置了多个数据库,数据库名称后缀是以1开始的数字。
"master": "DataSource=127.0.0.1;Database=test;uid=root;pwd=12345!a;ProviderName=MySql.Data.MySqlClient",
// 从库:如果配置了多个数据库,数据库名称后缀是以1开始的数字。
"secondary1": "DataSource=127.0.0.1;Database=test;uid=root;pwd=12345!a;ProviderName=MySql.Data.MySqlClient",
"secondary2": "DataSource=127.0.0.1;Database=test;uid=root;pwd=12345!a;ProviderName=MySql.Data.MySqlClient",
"test_SqlServer": "server=127.0.0.1;database=test;uid=sa;pwd=123456!a;DatabaseType=SqlServer",
"test_Oracle": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XXX)));User ID=XXX;Password=XXX;Persist Security Info=True;DatabaseType=Oracle",
"test_SQLite": "data source=.\\test.db;pooling=True;busytimeout=30000;journal mode=Wal;DatabaseType=SQLite"
}
}
数据库提供者工厂配置
支持2种方式来配置数据库和数据库提供者工厂之间的映射关系:
- 方式1:通过代码实现
- 方式2:通过配置文件实现
方式1:代码
- 代码示例1:
DatabaseType.MySql.SetDbProviderMap(new DbProviderMap("MySql.Data.MySqlClient", MySqlClientFactory.Instance));// MySql
DatabaseType.SqlServer.SetDbProviderMap(new DbProviderMap("System.Data.SqlClient", SqlClientFactory.Instance));// Microsoft SQL Server
DatabaseType.Oracle.SetDbProviderMap(new DbProviderMap("Oracle.ManagedDataAccess.Client", OracleClientFactory.Instance));// Oracle
DatabaseType.SQLite.SetDbProviderMap(new DbProviderMap("System.Data.SQLite", SQLiteFactory.Instance));// SQLite
- 代码示例2:
DatabaseType.MySql.SetDbProviderMap(new DbProviderMap("MySql.Data.MySqlClient", "MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data"));// MySql
DatabaseType.SqlServer.SetDbProviderMap(new DbProviderMap("System.Data.SqlClient", "System.Data.SqlClient.SqlClientFactory,System.Data.SqlClient"));// Microsoft SQL Server
DatabaseType.Oracle.SetDbProviderMap(new DbProviderMap("Oracle.ManagedDataAccess.Client", "Oracle.ManagedDataAccess.Client.OracleClientFactory,Oracle.ManagedDataAccess"));// Oracle
DatabaseType.SQLite.SetDbProviderMap(new DbProviderMap("System.Data.SQLite", "System.Data.SQLite.SQLiteFactory,System.Data.SQLite"));// SQLite
- 代码示例3:
// 如果直接使用数据库提供者工厂,也可以不配置数据库和数据库提供者工厂之间的映射关系。代码示例:
var db = n
Related Skills
feishu-drive
339.5k|
things-mac
339.5kManage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database)
clawhub
339.5kUse the ClawHub CLI to search, install, update, and publish agent skills from clawhub.com
yu-ai-agent
2.0k编程导航 2025 年 AI 开发实战新项目,基于 Spring Boot 3 + Java 21 + Spring AI 构建 AI 恋爱大师应用和 ReAct 模式自主规划智能体YuManus,覆盖 AI 大模型接入、Spring AI 核心特性、Prompt 工程和优化、RAG 检索增强、向量数据库、Tool Calling 工具调用、MCP 模型上下文协议、AI Agent 开发(Manas Java 实现)、Cursor AI 工具等核心知识。用一套教程将程序员必知必会的 AI 技术一网打尽,帮你成为 AI 时代企业的香饽饽,给你的简历和求职大幅增加竞争力。
