.NET Core 3.1添加EF迁移报错:无法创建ProvaContext实例及连接字符串为空
.NET Core 3.1 EF Core迁移异常解决方案
异常1:无法创建ProvaContext实例(无参构造函数缺失)
核心错误
System.MissingMethodException: No parameterless constructor defined for type 'Application.Context.ProvaContext'.
解决方案
有两种可行方式:
添加无参构造函数到ProvaContext
在ProvaContext类中补充无参构造函数,保留原有依赖注入用的带参构造函数:public class ProvaContext : DbContext { // 原有依赖注入构造函数 public ProvaContext(DbContextOptions<ProvaContext> options) : base(options) { } // 添加无参构造函数供EF设计时使用 public ProvaContext() { } // DbSet定义... }实现IDesignTimeDbContextFactory接口
若不想添加无参构造函数,可在项目中实现该接口,手动配置DbContext创建逻辑:using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; namespace Application.Context { public class ProvaContextFactory : IDesignTimeDbContextFactory<ProvaContext> { public ProvaContext CreateDbContext(string[] args) { var optionsBuilder = new DbContextOptionsBuilder<ProvaContext>(); // 直接指定连接字符串或读取配置文件 optionsBuilder.UseSqlServer("你的数据库连接字符串"); return new ProvaContext(optionsBuilder.Options); } } }
异常2:连接字符串参数为空(ArgumentNullException)
核心错误
System.ArgumentNullException: Value cannot be null. (Parameter 'connectionString')
解决方案
检查配置文件中的连接字符串
确认appsettings.json中存在正确的连接字符串配置:{ "ConnectionStrings": { "ProvaContext": "Server=.;Database=ProvaDb;Trusted_Connection=True;" } }确保启动项目正确读取配置
在WebApi项目的Startup.cs中,确认正确从配置中获取连接字符串:public void ConfigureServices(IServiceCollection services) { var connectionString = Configuration.GetConnectionString("ProvaContext"); services.AddDbContext<ProvaContext>(opts => opts.UseSqlServer(connectionString)); // 其他服务配置... }明确指定启动项目和目标项目
执行迁移命令时,手动指定包含配置的启动项目和包含DbContext的目标项目:dotnet ef migrations add InitialMigration --startup-project ./WebApi --project ./Application -c ProvaContext
内容的提问来源于stack exchange,提问作者Paulo Vitor
相关产品推荐
相关产品推荐

