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

Entity Framework Core:Update-Database命令执行失败原因排查

问题原因与解决方案

这个错误的根源很明确——你在WebApi项目的Startup配置里犯了一个小错误,把连接字符串的配置键名当成了实际连接字符串传给了EF Core。

具体哪里错了?

看你这段代码:

private void ConfigureDatabaseOptions(DbContextOptionsBuilder builder) { 
    builder.UseSqlServer("DefaultConnection", ConfigureSqlServerDatabaseOptions); 
} 

UseSqlServer的第一个字符串参数要求是完整的数据库连接字符串,但你传的是"DefaultConnection"——这只是你配置文件里连接字符串的键名,不是真正的连接字符串内容。EF Core把这个键名当作连接字符串去解析,自然会抛出"初始化字符串格式不符合规范"的异常。

为什么Add-Migration能正常运行?

因为Add-Migration命令是在设计时执行的,它会自动使用你在App.DataAccess.Migrations项目里定义的AppDbContextFactory。这个工厂类自己读取了项目内的appsettings.json,正确获取到了完整的连接字符串,所以迁移生成过程没问题。但Update-Database在执行时,会尝试使用WebApi项目运行时的DbContext配置(也就是你Startup里写错的那段),所以就报错了。

修复方法

你需要在Startup中注入IConfiguration,然后通过它获取真正的连接字符串:

  1. 先修改Startup的构造函数,注入IConfiguration:
private readonly IConfiguration _configuration;

public Startup(IConfiguration configuration)
{
    _configuration = configuration;
}
  1. 然后修正ConfigureDatabaseOptions方法:
private void ConfigureDatabaseOptions(DbContextOptionsBuilder builder) { 
    var connectionString = _configuration.GetConnectionString("DefaultConnection");
    builder.UseSqlServer(connectionString, ConfigureSqlServerDatabaseOptions); 
} 

这样修改后,Update-Database就能正确获取到格式合法的连接字符串,顺利完成数据库更新操作了。

内容的提问来源于stack exchange,提问作者Matthew Layton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:44:40