记开源项目:DotNetCore.CAP.MySql问题分析:only mysqlparameter objects may be stored
1. 简介
最近在学习分布式事务及解决方案,最终找到了开源项目DotNetCore.CAP ,因为自己用的MySql数据库比较多。于是也使用MySQL+EFCore+RabbitMQ+CAP实现事务最终一致性,所有配置都已经ok,就在程序运行之后,请求接口,启动事务,调用CapPublish写入消息的时候报错了:only mysqlparameter objects may be stored,当时这个问题给我整的怀疑人生,以为是我自己哪里配置有问题。最后才发现原来是DotNetCore.CAP.MySQL引用的是MySqlConnector包,而EFCore用的是Mysql.Data包,最终导致报错,在此记录下自己的问题排查步骤。
1. 问题分析思路
1. 第一步:检查项目配置
说实话,当时看到这个错误,整个人就有点懵逼,第一反应是自己的配置出现了问题,认真的检查完成之后,发现整个项目配置没问题。
2. 第二步:尝试其它代码
然后整个人有点傻眼,就各种尝试,因为怀疑是自己事务用的有问题,尝试使用MysqlConnection来创建事务 以及 EF对象类的DataBase来开启事务。最终都得到上面的报错。
3. 第三步:
迫于无奈,只能去github下载源码,因为之前自己下载过CAP的源码,所以基本直接将源码拿过来研究,
发现publish方法最终调用的是DotNetCore.CAP.MySQL里面的实现,来讲消息写入到数据库。然后就点开mysql的扩展:
4. 调试源码:
咋一看,没啥毛病,于是不死心,就把源码来到程序直接调试,然后还是报错,最终我点开这个MySqlParameter类,看到里面用的MySqlConnector这个包
然后发现是这个包的问题,最终强迫症大于选择,坚持使用mysql,不想换成sqlserver,于是对项目进行换包,删除掉MySqlConnector包,换成MySql.Data,然后重新编译,执行。最终成功解决问题。
3. 解决方案
- 对项目:DotNetCore.CAP.MySQL源码进行修改,删除MySqlConnector包,安装MySql.Data。
- 解决DotNetCore.CAP.MySQL项目中的引用报错,重新编译,在调试,
- 完美解决
4. 推荐使用Pomelo.EntityFrameworkCore.MySql
因为MySql.Data包的异步是假的,我特地看了下MySql.data的源码,发现其异步方法内,最终执行sql还是同步。
MysqlConnector与Mysql.Data对比,总体性能要高出。
推荐使用 Pomelo.EntityFrameworkCore.MySql 支持,因该包内部使用的是MySqlConnector包
最新文章
- c++文件输入输出流fstream,对输入>;>;和输出<;<;重载
- 【Beta版本】冲刺-Day4
- Eclipse导入项目:No projects are found to import
- python闭包小例子
- BZOJ3589 : 动态树
- linux 常用alias
- 各个手机APP客户端内置浏览器useragent
- Bootstrap简单Demo(2015年05月-18日)
- 在emacs里用w3m浏览网页
- POJ 2193 Lenny&#39;s Lucky Lotto Lists (DP)
- $().each 和 $.each() 两个方法的区别
- NeoOcean - Unity3D Ocean Waves Simulation
- json数据返回
- mongodb.open失效导致访问地址404
- redmine使用汇总redmine软件工程过程
- 简单的三层asp.net webForm使用Ninject实现Ioc
- (转)MultipleOutputFormat和MultipleOutputs
- BottomNavigationBar
- Recurrent Neural Network[SRU]
- [buaa-SE-2017]个人作业-期末总结
热门文章
- 驱动开发:内核CR3切换读写内存
- SQLyog企业版
- 痞子衡嵌入式:浅谈i.MXRT10xx系列MCU外接24MHz晶振的作用
- 一个 dubbo 和 springboot 的兼容性问题
- 锐捷网关交换机开启dhcp服务
- P7800 [COCI2015-2016#6] PAROVI 方法记录
- Docker | 容器数据卷详解
- 基于纯前端类Excel表格控件实现在线损益表应用
- Can not set int field xxx to java.lang.Long 错误
- 云计算_Apache CloudStack