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,然后通过它获取真正的连接字符串:
- 先修改
Startup的构造函数,注入IConfiguration:
private readonly IConfiguration _configuration; public Startup(IConfiguration configuration) { _configuration = configuration; }
- 然后修正
ConfigureDatabaseOptions方法:
private void ConfigureDatabaseOptions(DbContextOptionsBuilder builder) { var connectionString = _configuration.GetConnectionString("DefaultConnection"); builder.UseSqlServer(connectionString, ConfigureSqlServerDatabaseOptions); }
这样修改后,Update-Database就能正确获取到格式合法的连接字符串,顺利完成数据库更新操作了。
内容的提问来源于stack exchange,提问作者Matthew Layton
相关产品推荐
相关产品推荐

