【.net core】【watercloud】数据库连接报错问题

错误信息:

复制代码
中文提示 :  连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Cannot Open when State is Connecting.DbType="MySql";ConfigId="0".
English Message : Connection open error . Cannot Open when State is Connecting.DbType="MySql";ConfigId="0" 
   at SqlSugar.Check.Exception(Boolean isException, String message, String[] args)
   at SqlSugar.AdoProvider.CheckConnection()
   at SqlSugar.AdoProvider.BeginTran()
   at WaterCloud.Service.AutoJob.JobExecute.<>c__DisplayClass5_0.<<Execute>b__0>d.MoveNext() in E:\WaterCloud\WaterCloud.Service\AutoJob\JobExecute.cs:line 183

导致该问题的原因是连续两次请求或插入更新时,第一操作后,在第二次操作时,第一次的句柄未完全释放,使第二次操作使用该句柄时,句柄还处于链接状态。

解决方案:使用sqlsugar中的.CopyNew()方法,在每次操作时都使用新的数据库链接

在项目文件中修改内容

文件路径:E:\项目路径\WaterCloud.Data\Repository\RepositoryBase.cs

cs 复制代码
/*******************************************************************************
 * Copyright © 2020 WaterCloud.Framework 版权所有
 * Author: WaterCloud
 * Description: WaterCloud快速开发平台
 * Website:
*********************************************************************************/

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using WaterCloud.Code;

namespace WaterCloud.DataBase
{
	/// <summary>
	/// 泛型仓储实现
	/// </summary>
	/// <typeparam name="TEntity"></typeparam>
	public class RepositoryBase<TEntity> where TEntity : class, new()
	{
		// 用于其他表操作
		public ITenant Tenant
		{
			get { return _tenant; }
		}

		private ITenant _tenant;

		private SqlSugarScopeProvider _db;

		public SqlSugarScopeProvider Db
		{
            get { return _db; }
		}

		/// <summary>
		/// 切换上下文,不传参切换到实体租户
		/// </summary>
		/// <param name="configId"></param>
		/// <returns></returns>
		public ISqlSugarClient ChangeEntityDb(object configId = null)
		{
			if (!configId.IsEmpty())
			{
                _db = _tenant.GetConnectionScope(configId);
			}
			else
			{
                _db = _tenant.GetConnectionScopeWithAttr<TEntity>();
			}
			return _db;
		}

		public RepositoryBase(ISqlSugarClient scope)
		{
			_tenant = scope.AsTenant();
            _db = Tenant.GetConnectionScopeWithAttr<TEntity>();
		}

		public async Task<TEntity> Insert(TEntity entity)
		{
			return await _db.Insertable(entity).ExecuteReturnEntityAsync();
		}

		public async Task<int> Insert(List<TEntity> entitys)
		{
			return await _db.CopyNew().Insertable(entitys).ExecuteCommandAsync();
		}

		public async Task<int> Update(TEntity entity)
		{
			return await _db.CopyNew().Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
		}

		public async Task<int> Update(Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, TEntity>> content)
		{
			return await _db.CopyNew().Updateable(content).Where(predicate).ExecuteCommandAsync();
		}

		public async Task<int> Delete(TEntity entity)
		{
			return await _db.CopyNew().Deleteable(entity).ExecuteCommandAsync();
		}

		public async Task<int> Delete(Expression<Func<TEntity, bool>> predicate)
		{
			return await _db.CopyNew().Deleteable(predicate).ExecuteCommandAsync();
		}

		public async Task<TEntity> FindEntity(object keyValue)
		{
			return await IQueryable().InSingleAsync(keyValue);
		}

		public async Task<TEntity> FindEntity(Expression<Func<TEntity, bool>> predicate)
		{
			return await IQueryable().FirstAsync(predicate);
		}

		public ISugarQueryable<TEntity> IQueryable()
		{
			return _db.CopyNew().Queryable<TEntity>();
		}

		public ISugarQueryable<TEntity> IQueryable(Expression<Func<TEntity, bool>> predicate)
		{
			return IQueryable().Where(predicate);
		}

		public ISugarQueryable<TEntity> IQueryable(string strSql)
		{
			return _db.CopyNew().SqlQueryable<TEntity>(strSql);
		}
	}
}

在对应的增删改查操作中加入.CopyNew()方法

相关推荐
毛驴赶鹿2 小时前
【金仓数据库征文】KES V9性能调优实战记录:从慢SQL排查到全链路优化
数据库·sql
码农阿豪3 小时前
【金仓数据库征文】Mac开发环境|SpringBoot3 + MyBatisPlus对接KES V9 Docker实战全指南
数据库·macos·docker
杨云龙UP3 小时前
MySQL 数据库常用备份工具对比:mysqldump、mydumper 与 XtraBackup
linux·运维·服务器·数据库·mysql·dba·备份恢复
ZENERGY-众壹3 小时前
500个工商业电站压垮数据库?海量光伏时序数据存储的架构取舍
数据库·架构·influxdb·光伏·光伏运维
mubei-1234 小时前
SpringDAO的用法
java·开发语言·数据库
星蓝_starblue6 小时前
零服务器、零数据库!开源growth-board,利用GitHub自动管理刷题/学习/求职全流程
服务器·数据库·程序人生·系统架构·node.js·github·改行学it
三8448 小时前
sqli-labs1-10通关笔记
数据库
BullSmall10 小时前
Another Redis Desktop Manager(ARDM)下载指南
数据库·redis·缓存
SelectDB10 小时前
Apache Doris 倒排索引工作原理:全文检索提速 59 倍,点查提速 14 倍
数据库
码农颜10 小时前
5.1.1 原⼦性
数据库·mysql