EF Core 8无法生成迁移文件,多种排查无效求助
EF Core 8无法生成迁移文件的问题及解决过程
近一个月来完全无法使用EF Core 8创建任何迁移文件,此前该功能一直正常,现在就连本地原本能生成迁移的分支也失效了。
以下是执行add-migration命令的项目中,*.csproj文件里的EF Core相关包引用:
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.2" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="8.0.2" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.2" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference>
已尝试的排查操作:
- 添加了DesignTimeDbContextFactory
- 检查ApplicationDbContext配置及对应模型的DbSet<>是否正确添加
- 确保ApplicationDbContext包含无参构造函数
- 已在Program.cs中注册ApplicationDbContext
- 验证数据库连接字符串正确且能正常连接
- 通过Github Copilot排查,未检测到错误
- 删除现有迁移文件和Snapshot文件,问题仍未解决
调试后确认以下代码均能正常工作:
public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } public ApplicationDbContext() { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var configuration = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile("appsettings.json") .Build(); optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection")); base.OnConfiguring(optionsBuilder); } // 所有DbSet定义如下: public DbSet<MyEntity> MyEntities => Set<MyEntity>(); } public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext> { public ApplicationDbContext CreateDbContext(string[] args) { var configuration = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile("appsettings.json") .Build(); var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>(); optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection")); return new ApplicationDbContext(optionsBuilder.Options); } }
更新:
将ApplicationDbContext迁移至独立项目后,问题解决。实体类原本就处于独立项目中,因此无需额外迁移实体类。
内容的提问来源于stack exchange,提问作者m3xpl4y
相关产品推荐
相关产品推荐

