Entity Framework迁移Azure数据库失败:提示DefaultConnection未设置
问题原因与解决步骤
核心问题
- 设计时工厂连接字符串名称不匹配:你的
DesignTimeDbContextFactory中尝试读取名为C10的连接字符串,但appsettings.json里仅配置了DefaultConnection,导致无法获取有效连接字符串,进而触发报错。 - 目标数据库配置未生效:你实际要连接Azure数据库,但当前
appsettings.json里只有本地数据库的连接字符串,未配置Azure的连接信息。
解决步骤
1. 更新appsettings.json配置
添加Azure SQL数据库的连接字符串(可保留本地连接作为备用,也可直接替换DefaultConnection的值):
{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=NewDb;Trusted_Connection=True", "C10": "Server=tcp:你的Azure服务器名.database.windows.net,1433;Initial Catalog=你的Azure数据库名;Persist Security Info=False;User ID=你的数据库用户名;Password=你的数据库密码;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
2. 修正设计时工厂的连接字符串读取逻辑
- 若想使用新增的
C10连接字符串:确保appsettings.json中存在该键即可(当前工厂代码已指定C10,无需修改)。 - 若想直接用
DefaultConnection:修改工厂代码中的读取名称:
var connectionString = configuration.GetConnectionString("DefaultConnection");
3. 验证迁移命令执行路径
执行迁移命令时,确保命令行工作目录是包含appsettings.json的项目根目录,否则设计时工厂无法找到配置文件。
4. 检查Program.cs中的DbContext注册(若有)
如果项目启动时注册了MigrationDbContext,确保注册代码使用的连接字符串与迁移配置一致:
builder.Services.AddDbContext<MigrationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("C10"))); // 或"DefaultConnection",与迁移配置匹配
验证操作
完成修改后,重新执行迁移命令:
Add-Migration AddNewTables -Context MigrationDbContext Update-Database -Context MigrationDbContext
内容的提问来源于stack exchange,提问作者inno
相关产品推荐
相关产品推荐

