我正在使用VS 2019预览版和.NET Core 3.0创建ASP .NET Core Web API。 当我尝试执行:add-migration时,出现错误: “无法创建类型为'AppDbContext'的对象。对于设计时支持的不同模式,...”
下面是我的上下文文件:
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{ }
public DbSet<Categoria> Categorias { get; set; }
public DbSet<Produto> Produtos { get; set; }
}
我的ConfigureServices方法:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));
services.AddControllers().AddNewtonsoftJson();
}
我的appsettings.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;DataBase....."
},
...
}
我一直在使用这种方法,并且有效。
我也尝试在上下文类中创建一个空的构造函数,但出现此错误: “ System.InvalidOperationException:没有为此DbContext配置数据库提供程序...”
我忘了一些细节吗?
注意:这在ASP .NET Core 2.2中可以正常工作
答案 0 :(得分:0)
您可以通过实现DbContext
接口来告诉迁移如何创建IDesignTimeDbContextFactory<TContext>
:如果在与派生的DbContext
相同的项目中或在在应用程序的启动项目中,这些工具会绕过创建DbContext
的其他方式,而改用设计时工厂。
有关更多信息,请参见this link
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore.Infrastructure;
namespace MyProject
{
public class AppDbContextFactory : IDesignTimeDbContextFactory<AppDbContext>
{
public AppDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();
optionsBuilder.UseMySql("Server=localhost;DataBase.....");
return new AppDbContext(optionsBuilder.Options);
}
}
}