SkillAgentSearch skills...

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/DbRepository
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

🌈 简介

ORM框架,支持数据库:MySQLMariaDBTiDBOceanBaseSQL ServerOracleSQLiteDuckDBMS AccessFirebirdPostgreSqlOpenGaussHighgoDB(瀚高)IvorySQLQuestDBDB2InformixClickHouseDameng(达梦)KingbaseES(人大金仓)ShenTong(神通)Xugu(虚谷)

  • 支持:DbFirstCodeFirst
  • 支持主从库分离(主库:增\删\改,从库:查)
  • 支持分表(自定义表名规则)
  • 支持Expression表达式树解析:whereExpressionfieldExpression
  • 常用类:

| 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 | Sean.Core.DbRepository | Sean.Core.DbRepository | | Sean.Core.DbRepository.Dapper | Sean.Core.DbRepository.Dapper | Sean.Core.DbRepository.Dapper | Sean.Core.DbRepository.Dapper |

🍉 数据库

CRUD Test: TestRepository.cs

DbFirst: CodeGeneratorFactory

CodeFirst: 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 | ✅ | | ✅ | 虚谷数据库 |

💯 性能测试

DapperExecute方法执行插入批量实体数据的本质是一条一条的插入,当数据量非常大时会很慢,可以分批把多条实体数据拼成一条脚本一次性执行(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.configWeb.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

  • 配置示例:可以通过设置ProviderNameDatabaseType的值来指定数据库类型
{
  "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

View on GitHub
GitHub Stars16
CategoryData
Updated4d ago
Forks1

Languages

C#

Security Score

95/100

Audited on Mar 24, 2026

No findings