ошибка миграции ядра .net: не удалось создать объект типа ‘DataContext’

#c# #asp.net #.net #entity-framework #.net-core

#c# #asp.net #.net #entity-framework #.net-core

Вопрос:

Я пытаюсь настроить серверную часть dotnet с отдельными проектами, у меня есть проект API (который является webapi) в качестве основного проекта, затем у меня есть проект persistence, который содержит класс DataContext.

DataContext.cs:

 using Domain;
using Microsoft.EntityFrameworkCore;

namespace Persistence
{
    public class DataContext : DbContext
    {
        public DataContext(DbContextOptions options) : base(options)
        {

        }
        public DbSet<Book> Books { get; set; }
    }
}
  

И я внедряю DataContext в службы конфигурации в файле запуска:

    public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<DataContext>(opt =>
            {
                opt.UseSqlite(Configuration.GetConnectionString("DefaultConnection"));
            });
            services.AddControllers();
        }
  

затем, когда я пытаюсь добавить миграцию с помощью этой команды:

 dotnet ef migrations add InitialCreate -s API -p Persistence    
  

Это выдает мне эту ошибку.

Пожалуйста, есть идеи, почему это происходит?

Комментарии:

1. Есть ли еще какая-либо информация об ошибке, кроме «Я не могу создать объект»?

2. @gunr2171 это полная ошибка: не удалось создать объект типа ‘DataContext’. Для различных шаблонов, поддерживаемых во время разработки, см. go.microsoft.com/fwlink/?linkid=851728

3. Из опубликованной вами ссылки: «Сам DbContext и любые зависимости в его конструкторе должны быть зарегистрированы как службы в поставщике услуг приложения. Этого можно легко достичь, имея конструктор в DbContext, который принимает экземпляр DbContextOptions<TContext> в качестве аргумента и используя метод AddDbContext<TContext> . » Попробуйте сделать это — создайте параметр в своем конструкторе DbContextOptions<DataContext> options .

4. @gunr2171 я сделал именно это: public DataContext(DbContextOptions<DataContext> options) : base(options) { } к сожалению, он по-прежнему выдает ту же ошибку

Ответ №1:

прежде всего, проверьте строку подключения в appsettings.json и после этого запустите эту команду для миграции

 dotnet ef migrations add 1
  

затем

 dotnet ef migrations update
  

и если это не сработало, проверьте пакет ef core из *.csproject

Ответ №2:

попробуйте добавить пустой конструктор:

общедоступный DataContext() {}

Комментарии:

1. я сделал это, и теперь он выдает другую ошибку: No database provider has been configured for this DbContext. A provider can be configured by overriding the DbContext.OnConfiguring method or by using AddDbContext on the application service provider. If AddDbContext is used, then also ensure that your DbContext type accepts a DbContextOptions<TContext> object in its constructor and passes it to the base constructor for DbContext.

2. попробуйте переопределить метод OnConfiguring в вашем контексте, подобный этому: защищенное переопределение void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder . IsConfigured) { optionsBuilder. UseSqlServer(«ваша строка подключения идет сюда»); } }

Ответ №3:

поместите ваше (var app = builder.Build();) в Program.cs после добавления вашего контекста