“错误无法创建类型为'AppDbContext'的对象。针对设计时支持的不同模式”

时间:2019-05-29 14:51:29

标签: .net-core entity-framework-core

我正在使用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中可以正常工作

1 个答案:

答案 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);
        }
    }
}