.NetCore关于Cap(RabbitMQ)结合MySql使用出现MySql相关类冲突问题解决办法
问题还原
引用了
DotNetCore.CAP.MySql
MySql.Data.EntityFrameworkCore
在使用MySql相关对象的时候会出现如下冲突,在命名空间加入伪空间名称是不能解决这个问题的(注:如果直接用这个Pomelo.EntityFrameworkCore.MySql是不会有问题的)

解决问题
出现上面的问题肯定要改造代码,那么我们在只能不用这些对象了
不用这些对象怎么来实现操作数据库呢?
所以只用调用上下文对象了,获取连接只能使用 上下文对象中的操作
之前做了一个CQRS 是直接用Dapper访问的数据,封装了一个工厂,现在我用上下文就不需要这些
添加DbContext配置
services.AddDbContext<UserDbContext>(
optionsBuilder =>
{
var _userappsetting = Configuration.GetSection("UserDbConfig").Get<UserDbConfig>();
if (_userappsetting == null)
{
throw new Exception("数据库连接字符串未配置");
}
switch (_userappsetting.DbType)
{
case :
optionsBuilder.UseSqlServer(_userappsetting.UserConnectString, sqlserver =>
{
sqlserver.MigrationsAssembly(_migrationAssablyName); sqlserver.UseRowNumberForPaging(); });
break;
case :
optionsBuilder.UseMySQL(_userappsetting.UserConnectString, mysql =>
{
mysql.MigrationsAssembly(_migrationAssablyName); });
break;
default:
optionsBuilder.UseMySQL(_userappsetting.UserConnectString, mysql =>
{
mysql.MigrationsAssembly(_migrationAssablyName); });
break; }
});
同时将上下文对象注册到构成函数中去
.AddSingleton<IDbProviderFactory>(p =>
{
var context = p.GetRequiredService<UserDbContext>();
return new CreateDbProviderFactory(context);
}
这样做还有一个好处,不用在根据在工厂类去判断使用的是什么数据库了,这个工作全部都交给了UserDbContext上下文文对象了
改造后的代码
public class CreateDbProviderFactory : IDbProviderFactory
{
private readonly UserDbContext _context;
public CreateDbProviderFactory(UserDbContext context)
{
_context = context;
} public IDbConnection GetConnection()
{
return _context.Database.GetDbConnection();
}
}
这样开始来也比较简洁了
在用户登录查询如下使用
using (var db = _dbProviderFactory.GetConnection())
{
var model = (await db.QueryAsync<dynamic>("select * from tb_user where username=@username and password=@password", new { @username = username, @password = password })).FirstOrDefault();
}
这样做及时解决了冲突的问题,同时还简化了代码
.NetCore关于Cap(RabbitMQ)结合MySql使用出现MySql相关类冲突问题解决办法的更多相关文章
- 转】MySQL客户端输出窗口显示中文乱码问题解决办法
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4008095.html 感谢! 最近发现,在MySQL的dos客户端输出窗口中查询表中的数据时,表中的中文数据都显 ...
- mysql中CONCAT值为空的问题解决办法
在mysql中concat函数有一个特点就是有一个值为null那么不管第二个字符有多少内容都返回为空了,这个特性让我们在实例应用中可能觉得不方便,但实现就是这样我们需要使用其它办法来解决. 天在做op ...
- MySQL客户端输出窗口显示中文乱码问题解决办法
最近发现,在MySQL的dos客户端输出窗口中查询表中的数据时,表中的中文数据都显示成乱码,如下图所示:
- [TimLinux] MySQL 导入sql文件数据慢的问题解决办法
慢的时候执行的命令: mysql -uusername -p -hip_address -Ddb_name < ./db.sql 快的时候执行的命令: mysql -uusername -p - ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- MySQL 5.7 Replication 相关新功能说明
背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关, ...
- Ubuntu彻底删除MySQL然后重装MySQL
删除 mysql sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-server sudo apt- ...
- Navicat for mysql 远程连接 mySql数据库10061、1045错误
原文地址:http://www.111cn.net/database/mysql/46377.htm 有朋友可能会碰到使用Navicat for mysql 远程连接 mySql数据库会提示10061 ...
- MYSQL数据库无法使用IP地址访问的解决办法
1.在运行中输入CMD,确定,进入文本方式. 2.输入mysql -h localhost -u root -p 回车,使用ROOT用户登录. 3.输入use mysql; 显示Database ch ...
随机推荐
- php学习目录
前面的话 前端工程师为什么要学习php?是因为招聘要求吗?这只是一方面 一开始,我对学习php是抵触的,毕竟javascript已经够自己喝一壶的了,再去学习php,可能让自己喝醉.但是,在学习jav ...
- Luogu5162 WD与积木(生成函数+多项式求逆)
显然的做法是求出斯特林数,但没有什么优化空间. 考虑一种暴力dp,即设f[i]为i块积木的所有方案层数之和,g[i]为i块积木的方案数.转移时枚举第一层是哪些积木,于是有f[i]=g[i]+ΣC(i, ...
- Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别以及ClassPathXmlApplicationContext 的具体路径
一.ClassPathXmlApplicationContext 的具体路径 String s[] = System.getProperty("java.class.path"). ...
- 【ARC076D/F】Exhausted?
Description 题目链接 Solution 场上尝试使用优化建图网络流实现,结果T到怀疑人生. 鉴于这是个匹配问题,考虑用贪心做一下. 先退一步,想一下如果每一个人只有\([1 ...
- eclipse/intellij idea 查看java源码和注释
工作三年了,一直不知道怎么用IDE查看第三方jar包的源码和注释,惭愧啊!看源码还好些,itellij idea自带反编译器,eclipse装个插件即可,看注释就麻烦了,总不能去找api文档吧!现在终 ...
- Linux上java程序的jar包启动通用脚本(稳定用过)
Linux上java程序的jar包启动通用脚本如下: #! /bin/sh export LANG="zh_CN.GBK" SERVICE_NAME=` .sh` SCRIPT_N ...
- cygwin简介及使用
一个是真实的假货,一个是冒牌的真品前指 Cygwin,后指 Linux/VMWare 路不管平还是陡,终归你要走的,如果你愿意投入到linux开发的社群中来,不会安装linux系统,不会配置工作环境是 ...
- Qt ------ 自定义QVector<T>中的T
#ifndef FREQUENCYSPECTRUM_H #define FREQUENCYSPECTRUM_H #include <QtCore/QVector> /** * Repres ...
- CCNA学习与实验指南——第2章 网络互联和参考模型
大三下学期的这个时间段,不知道是不是社会就业的恐惧与自身前途的迷茫所带来的压力,身边的同学一个个的整天奔赴考研室学的好不努力,空荡荡的宿舍只剩我一人孑然聊聊甚是索然无味,亦或许是即将毕业的压力等接踵而 ...
- python循环删除列表元素常见错误与正确方法
python循环删除列表元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 常见错误 常见错误一:使用固定长度循环删除列表元素 # 使用固定长度循环pop方法删除列表元素 num_list_ ...