«Ошибка Невозможно создать объект типа« AppDbContext ». Для различных шаблонов, поддерживаемых во время разработки» - PullRequest
0 голосов
/ 29 мая 2019

Я создаю ASP .NET Core Web API с использованием предварительного просмотра VS 2019 и .NET Core 3.0.Когда я пытаюсь выполнить: add -igration, я получаю сообщение об ошибке: "Невозможно создать объект типа '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 Ответ

1 голос
/ 29 мая 2019

Вы можете указать при миграции, как создать DbContext, реализуя интерфейс IDesignTimeDbContextFactory<TContext>: если класс, реализующий этот интерфейс, найден либо в том же проекте, что и производный 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);
        }
    }
}
...