Нет поставщиков баз данных EF7

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

Вопрос

Кажется, я получаю это сообщение об ошибке при использовании Entity Framework 7 и MVC6

System.InvalidOperationException Не настроены поставщики баз данных. Настройте поставщика базы данных путем переопределения OnConfiguring в вашем классе DbContext или в методе AddDbContext при настройке служб.

Я считаю, что сделал все, что я должен делать, поэтому, возможно, это ошибка. Я использую версию 7.0.0-бета7 Entity Framework.

Я установил свой DbContext, интерфейс, чтобы я мог издеваться над DbContext (был необходим в EntityFramework 6 для модульного тестирования). Мои службы принимают интерфейс как конструктор, и у меня есть установка DI в MVC 6.

В моем файле Startup.cs у меня есть следующее

public void ConfigureServices(IServiceCollection services)
{
    // entity framework
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<MyDbContext>(options =>
            options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"])
        );

    // Add MVC services to the services container.
    services.AddMvc();

    // new context on each request
    services.AddScoped<IMyDbContext, MyDbContext>();
}

Я проверил мой connectionString и вернул действительное соединение. Я также проверил в своей службе, что объект вводится, и он не является нулевым, поэтому все должно работать.

Мой файл config.json выглядит так:

{
    "Data": {
        "MyConnection": {
            "ConnectionString": "Server=(local);Database=XXXX;Trusted_Connection=True;"
        }
    }
}

Мой DbContext не переопределяет метод OnConfiguring, потому что я считаю, что он не нужен, поскольку я делаю все это, как указано выше? Я прав? Что мне не хватает? Посмотрев на множество разных веб-сайтов, я предполагаю, что некоторые используют старый код, потому что некоторые методы не существуют, а другие веб-сайты имеют то же самое, что и у меня.

Принятый ответ

Создайте свой MyDbContext, показанный ниже, чтобы ввести параметр, определенный в вызове Startup.cs AddDbContext ().

public MyDbContext(DbContextOptions options)
: base(options)
{ }

Это позволит вам передать строку соединения из Configuration (config.json) в опции вызова метода. UseSqlServer ()

services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"]));

Я столкнулся с той же проблемой, когда мне пришлось разделить мое решение на отдельные проекты Web, BL и DAL.


Популярные ответы

Я верю, что вы попали в эту ошибку в строке, где вы пытаетесь получить доступ к некоторым данным из базы данных. Вы можете решить эту проблему, настроив свой контекст. Просто переопределите метод OnConfiguring.

public class MyDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer("<your connection string>");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        ...
    }
}


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему