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

ASP.NET Core 7.0中Entity Framework迁移无法正常执行求助

解决ASP.NET Core 7.0中EF迁移无法正常执行的问题

问题核心分析

你的问题主要来自三个方面:连接字符串格式错误导致EF无法连接数据库执行迁移、EnsureCreated与迁移体系的冲突,以及ASP.NET Core 7.0对EF设计时工厂加载逻辑的细节调整。


具体解决步骤

1. 修正连接字符串格式

你的连接字符串同时指定了端口和实例名,这是SQL Server不支持的写法,需二选一调整:

  • 如果使用命名实例(实例名SQLSRVSP01DB01):
    "Data Source=192.13.1.20\\SQLSRVSP01DB01;Initial Catalog=teste;Integrated Security=False;User ID=sa;Password=**********;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False"
    
  • 如果使用1433端口的默认实例:
    "Data Source=192.13.1.20,1433;Initial Catalog=teste;Integrated Security=False;User ID=sa;Password=**********;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False"
    

注意:确保sa账号拥有创建数据库、表的完整权限

2. 移除Database.EnsureCreated()调用

从ContextDB的构造函数中删除Database.EnsureCreated();——这个方法会绕过EF的迁移体系,直接生成数据库和表,导致后续执行Update-Database时,因数据库缺少__EFMigrationsHistory表而报错。

修正后的ContextDB构造函数:

public class ContextDB : DbContext
{
    public ContextDB()
    {
    }

    public ContextDB(DbContextOptions<ContextDB> options) : base(options)
    {
        // 移除Database.EnsureCreated();
    }

    public DbSet<BSCEMPRESGRP> TBBSCEMPRESGRP { get; set; }
    
    // ...其他DbSet定义
}

3. 确保IDesignTimeDbContextFactory正确工作

  • 确认ContextFactory与ContextDB在同一个项目中;若不在同一项目,执行迁移命令时需通过--project参数指定包含工厂类的项目。
  • 验证连接字符串是否正确获取:可在ContextFactory中临时添加输出,确认GetSQLConectionConfig()返回的是修正后的字符串:
    public ContextDB CreateDbContext(string[] args)
    {
        var connectionString = new GBLSQLCONEXA().GetSQLConectionConfig();
        Console.WriteLine($"当前连接字符串:{connectionString}"); // 临时输出验证
        var optionsBuilder = new DbContextOptionsBuilder<ContextDB>();
        optionsBuilder.UseSqlServer(connectionString);
        return new ContextDB(optionsBuilder.Options);
    }
    
  • 如果GBLSQLCONEXA依赖API的配置文件(如appsettings.json),设计时环境可能无法加载这些配置,此时可在工厂类中直接硬编码连接字符串测试,排除配置加载问题。

4. 重新执行迁移命令

打开终端或Package Manager Console,执行以下命令:

  • 生成迁移文件:
    # 终端命令(多项目场景需指定项目)
    dotnet ef migrations add InitialCreate --project 你的数据层项目名 --startup-project 你的API项目名
    
    或者Package Manager Console(单项目场景):
    Add-Migration InitialCreate
    
  • 更新数据库:
    # 终端命令(多项目场景需指定项目)
    dotnet ef database update --project 你的数据层项目名 --startup-project 你的API项目名
    
    或者Package Manager Console(单项目场景):
    Update-Database
    

5. 版本兼容性检查

确保你的EF Core版本为7.0.x,与ASP.NET Core 7.0版本完全匹配,避免版本不兼容导致的设计时加载问题。


内容的提问来源于stack exchange,提问作者Anderson Lopez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:47:33