You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core MVC更新迁移数据库遇EF连接字符串格式错误求助

Fixing "Format of the initialization string does not conform to specification" in EF Core with ASP.NET Core MVC

我看了你遇到的这个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;"
      }
      

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:02:40