0

所以我看到了 .NET Core 的 Pomelo 包最奇怪的行为。

var optionsBuilder = new DbContextOptionsBuilder<AssessmentContext>();
var cn = String.Format(config["ConnectionStrings:AwsConnection"], config["Aws:MySQLPassword"]);

optionsBuilder.UseMySql(cn);
db = new AssessmentContext(optionsBuilder.Options);

我在单元测试中有上面的代码来设置连接到 AWS 中的 MySQL 数据库。这已经工作了大约一个星期。但是,从今天开始,到optionsBuilder.UseMySql(cn);现在为止,我遇到了一个例外。

Assessment.Tests.Data.Contexts.AssessmentContextTests.ConnectToMySQL:
    Outcome: Failed
    Error Message:
    Class Initialization method Assessment.Tests.Data.Contexts.AssessmentContextTests.Initialize threw exception. System.TypeLoadException: System.TypeLoadException: Could not load type 'MySql.Data.MySqlClient.MySqlConnectionStringBuilder' from assembly 'MySqlConnector, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d33d3e53aa5f8c92'..
    Stack Trace:
       at Microsoft.EntityFrameworkCore.MySqlDbContextOptionsExtensions.UseMySql(DbContextOptionsBuilder optionsBuilder, String connectionString, Action`1 mySqlOptionsAction)
   at Microsoft.EntityFrameworkCore.MySqlDbContextOptionsExtensions.UseMySql[TContext](DbContextOptionsBuilder`1 optionsBuilder, String connectionString, Action`1 mySqlOptionsAction)
   at Assessment.Tests.Data.Contexts.AssessmentContextTests.Initialize(TestContext context) in

这一直运作良好。我没有更新任何库,但它失败了,我无法连接。有什么想法吗?我正在使用 .NET Core 3.1 和 pomelo 版本 3.0.1。

4

1 回答 1

2

是版本不匹配。MySqlConnector 在版本 1.0.0 中更改了其命名空间。由于这是一个重大更改并且 Pomelo 符合 SemVer2,因此 Pomelo 仍在使用 MySqlConnector < 1.0.0(当前为 0.69.9)。

Pomelo 的更高版本(例如当前版本 3.2.2)明确限制 MySqlConnector 版本低于 1.0.0,因此使用 MySqlConnection 版本 >= 1.0.0 会导致编译时错误而不是运行时错误。

所以要解决这个问题,请使用低于 1.0.0 的最新版本的 MySqlConnector。


附带说明一下,您应该考虑使用 EF Core 3.1.8 和 Pomelo 3.2.2。自 3.0.1 版本以来,Pomelo 已经有许多错误修正。

于 2020-10-01T02:18:12.823 回答