Asp.Net Core MVC更新迁移数据库遇EF连接字符串格式错误求助
我看了你遇到的这个EF Core连接字符串格式错误,一眼就发现了几个关键问题,尤其是在DatenbankKontextFactory里的写法,这应该是触发错误的核心原因。咱们一步步来排查解决:
1. 修复Design-Time Context Factory的核心问题
你的DatenbankKontextFactory里直接把配置项名称"MyConnectionString"传给了UseSqlServer,但EF需要的是实际的连接字符串内容,而不是配置键名。这就导致EF把这个字符串当成连接字符串解析,自然不符合格式规范,触发了索引0开始的格式错误。
修改DatenbankKontextFactory,让它正确读取appsettings.json里的实际连接字符串:
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; using Microsoft.Extensions.Configuration; using System.IO; using PlaudertischSoftware.Models; namespace PlaudertischSoftware { public class DatenbankKontextFactory : IDesignTimeDbContextFactory<DatenbankKontext> { public DatenbankKontext CreateDbContext(string[] args) { // 读取项目根目录的appsettings.json配置文件 IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); var optionsBuilder = new DbContextOptionsBuilder<DatenbankKontext>(); // 获取配置中实际的连接字符串内容 var connectionString = configuration.GetConnectionString("MyConnectionString"); optionsBuilder.UseSqlServer(connectionString); return new DatenbankKontext(optionsBuilder.Options); } } }
2. 检查数据库驱动与连接字符串的一致性
我注意到你引用了Pomelo.EntityFrameworkCore.MySql包,但Startup.cs里却用UseSqlServer连接SQL Server LocalDB。这里需要做个确认:
- 如果你的目标数据库是SQL Server:当前
UseSqlServer的写法没问题,跳过这一步。 - 如果你的目标数据库是MySQL:需要把
Startup.cs的数据库配置改成MySQL适配的写法,同时调整appsettings.json的连接字符串格式:- 修改Startup.cs:
services.AddDbContext<DatenbankKontext>(options => options.UseMySql(Configuration.GetConnectionString("MyConnectionString"), new MySqlServerVersion(new Version(8, 0, 28)))); // 替换为你的MySQL实际版本 - 修改appsettings.json的连接字符串:
"ConnectionStrings": { "MyConnectionString": "server=localhost;database=your_db_name;user=root;password=your_db_password;" }
- 修改Startup.cs:
3. 验证SQL Server连接字符串格式
你的SQL Server连接字符串写法是正确的,但再确认一下JSON里的转义符:
"ConnectionStrings": { "MyConnectionString": "Server=(localdb)\\mssqllocaldb;Database=MyConnectionString;Integrated Security=True" }
JSON里的双反斜杠\\是正确的转义写法,用来表示实际连接字符串里的单斜杠,这部分没问题。
4. 优化Program.cs的配置加载逻辑
你的Program.cs用的是旧版WebHostBuilder,ASP.NET Core 3.0+推荐用Host.CreateDefaultBuilder,它会自动加载appsettings.json等配置文件,避免手动配置可能的遗漏:
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace PlaudertischSoftware { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseUrls("http://*:5000") .UseStartup<Startup>(); }); } }
做完以上修改后,清理项目、重新生成,再尝试执行Add-Migration或Update-Database命令,应该就能解决这个格式错误了。
内容的提问来源于stack exchange,提问作者OEZ BRO

