Entity Framework连接MySQL时字符串转ServerVersion错误如何解决?
问题原因
你使用的是3.0及以上版本的Pomelo.EntityFrameworkCore.MySql驱动,该版本开始UseMySql方法不再支持仅传入连接字符串一个参数,必须额外传入对应MySQL/MariaDB的ServerVersion实例作为第二个参数,因此会触发参数类型转换报错。
解决方案
- 方案1:自动检测服务器版本(适合开发场景,无需提前知道数据库版本)
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { string connectionStr = @"server=localhost;port=3306;database=shopDb;user=root;password=mysql123;"; optionsBuilder.UseMySql(connectionStr, ServerVersion.AutoDetect(connectionStr)); }
- 方案2:手动指定服务器版本(适合生产场景,数据库版本固定,避免自动检测的性能开销)
如果使用的是MySQL,参考写法:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql(@"server=localhost;port=3306;database=shopDb;user=root;password=mysql123;", new MySqlServerVersion(new Version(8, 0, 33))); // 替换为你实际的MySQL版本号 }
如果使用的是MariaDB,参考写法:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql(@"server=localhost;port=3306;database=shopDb;user=root;password=mysql123;", new MariaDbServerVersion(new Version(10, 6, 8))); // 替换为你实际的MariaDB版本号 }
注意事项
请确认项目已安装正确的NuGet包Pomelo.EntityFrameworkCore.MySql,版本要和你使用的.NET版本、EF Core版本兼容。
内容的提问来源于stack exchange,提问作者Robin sharma
相关产品推荐
相关产品推荐

