我的项目仓储FreeSqlRepository中同时引用了“FreeSql.Provider.MySql” 和“FreeSql.Provider.MySqlConnector” 两个组件。 当我使用freesql操作数据库增删改查时,系统总是报类似如下错误:【主库】状态不可用,等待后台检查程序恢复方可使用。Fatal error encountered during command execution.
其实只要删除FreeSql.Provider.MySql,系统就不会报这种错误了,但是巧合的是,“FreeSql.Provider.MySql”这个引用删除了又会引起我使用的一个老版本aspose.words插件他new document失败。
报错:Aspose.Words.FileCorruptedException:“The document appears to be corrupted and cannot be loaded.”
所以 FreeSql.Provider.MySql 还不能删除,两头为难。
经过freesql讨论群一个大佬发的链接指导。可以在.UseConnectionString()方法中配置第三个参数Type.GetType("FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector"),强行制定连接串使用的插件类型,可以解决主库不可用的问题。
参考链接:https://github.com/dotnetcore/FreeSql/discussions/1207
同时安装了FreeSql.Provider.MySql和FreeSql.Provider.MySqlConnector 无法使用 ExecuteMySqlBulkCopy 方法
二个共存时,默认根据 FreeSql.Provider.MySql 得到 的MySqlProvider 实现 ,可在UseConnectionStrings中第三个参数指定Type
UseConnectionStrings(DataType.MySql,"连接串",Type.GetType("FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector"));
发布后测试补充:
16点10,经过发布后测试,发现 在UseConnectionStrings中第三个参数指定Type之后,跟删除FreeSql.Provider.MySql实现的是一个效果,可以让系统不报错 主库不可用, 但是同时又让aspose.word 不能new document()了。 还是没能解决问题。
现在的重点可能还是要解决aspose.word 不能new document()的问题。
aspose.word 不能new document() 最新解决办法和原理说明
The document appears to be corrupted and cannot be loaded这个错误,本身是字符集问题。可能是aspose需要GBK字符集,但是.NETCORE6默认没有注册GBK字符集。然后刚好我用到FreeSql.Provider.MySql这个插件他帮忙注册了GBK字符集,所以aspose就没有报错,但是删除了FreeSql.Provider.MySql,aspose就没有GBK字符集了,所以在aspose使用之前要注册GBK字符集。 一行代码就行了:Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
截图如下我红框画的部分加上就好了: