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

3
我正在使用VS 2019 preview和.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 中,这个方法可以正常工作。


请确保您已更新Nuget包。如果没有,请右键单击解决方案资源管理器中的项目,选择“管理Nuget包”,并更新那些带有小蓝箭头的包。希望这对您有所帮助! - SUNIL DHAPPADHULE
同样的问题,.NET Core 3.1 在 VS 2019 中。 - Ted
1个回答

2
你可以通过实现 IDesignTimeDbContextFactory<TContext> 接口来告诉迁移如何创建你的 DbContext: 如果在派生 DbContext 的同一项目或应用程序启动项目中找到实现此接口的类,则工具会绕过其他创建 DbContext 的方式,而使用设计时工厂。
更多信息请参见此链接。原始答案: "最初的回答"。
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);
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接