DotNet Core + Dapper 数据库连接池耗尽

本文详细介绍了DotnetCore中数据库连接池的默认配置,包括连接数、超时时间等参数。同时,探讨了Dapper对数据库连接池的两种管理方式:程序员自行控制和Dapper托管,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dotnet Core数据库连接池默认是开启状态,连接数默认100,连接超时默认15秒。当然你可设置Pooling=false不启用数据连接池。

Data Source=localhost;Initial Catalog=LOP;User ID=sa;Password=nc;Persist Security Info=True;Pooling=true;Max Pool Size=16;Min Pool Size=0;Connection Lifetime=20;

Dapper对数据库连接池有两种管理方式:程序员自己控制和Dapper托管

        创建IDbConnection后,如果添加conn.Open()代码行,相当于程序员自己管理Open和Closed; 如果你想让Dapper来管理Open和Closed就不要写conn.Open啦; 事务操作例外。

IDbConnection CreateConnection(DatabaseType dbType, string strConn)
{
    IDbConnection connection = null;
    if (string.IsNullOrWhiteSpace(strConn))
        throw new ArgumentNullException("The Database Connection Undefined");

    switch (dbType)
    {
        case DatabaseType.SqlServer:
            connection = new SqlConnection(strConn);
            break;
        case DatabaseType.MySQL:
            connection = new MySqlConnection(strConn);
            break;
        default:
            throw new ArgumentNullException($"The Database Type ({dbType.ToString()}) Not Support");
    }
    //要自己控制 还是Dapper托管
    connection.Open();
}

 

### DotNetCore CAP 使用 SQLite 配置数据库连接字符串 在 DotNetCore 中使用 CAP (Common Application Platform) 并将其与 SQLite 数据库集成时,配置数据库连接字符串是一个重要的环节。CAP 支持多种数据库作为消息存储介质,而 SQLite 是其中一种轻量级的选择。 #### 连接字符串的配置方式 SQLite 的连接字符串通常由多个键值对组成,这些键值对通过分号 (`;`) 分隔开。对于 CAP 来说,其核心功能依赖于数据库表结构的设计以及数据持久化的方式。以下是典型的 SQLite 连接字符串模板: ```plaintext Data Source=your_database_file.db;Cache Size=-1000;Synchronous=Off; ``` 如果需要指定附加数据库文件,则可以尝试扩展连接字符串中的参数设置[^1]。然而需要注意的是,“`attachs`”并非标准 SQLite 连接字符串的关键字之一,在实际应用中可能会引发解析异常或不被识别的情况。 #### 解决 'attachs' 不支持的问题 针对 `'attachs'` 关键字无法正常工作这一现象,建议采取如下措施来规避此问题并实现类似的功能需求: 1. **手动执行 ATTACH DATABASE 命令** 虽然直接在连接串里加入 `attachs` 参数不可行,但可以通过显式调用 SQL 语句完成相同目的。即在应用程序启动阶段或者事务处理之前运行下面这样的命令: ```csharp using var connection = new SqliteConnection("Data Source=:memory:"); await connection.OpenAsync(); await connection.ExecuteAsync("ATTACH DATABASE 'path_to_secondary_db.sqlite' AS secondaryDb;"); ``` 2. **调整架构设计减少跨库操作必要性** 如果频繁涉及不同数据库之间的交互查询,考虑重构业务逻辑使得大部分计算可以在单一数据库实例内部完成,从而避免因外部附加工具缺失带来的局限性[^2]。 3. **升级驱动版本确认最新特性兼容情况** 确认所使用的 .NET Core 和 Entity Framework Core 版本均为最新稳定版,并查阅官方文档了解是否有新增的支持选项能够满足当前场景下的特殊要求[^3]。 ```csharp public void ConfigureServices(IServiceCollection services) { services.AddCap(options => { options.UseEntityFramework<DbContext>(); options.UseRabbitMQ(configure => { }); options.UseDashboard(); }) .AddSqliteStorage("DataSource=./capdb.db"); } ``` 以上代码片段展示了如何向服务集合注册 CAP 组件的同时指定了基于 SQLite 的事件追踪仓储路径。 ### 总结 综上所述,当遇到关于 SQLite 数据源配置过程中有关非标准化关键词如‘attachs’引起的冲突时,推荐采用程序初始化期间主动加载额外资源的方法代替原生语法表达;另外适时优化整体设计方案也是有效途径之一。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值