«Для этого DbContext не настроен поставщик базы данных» с использованием SQLite - PullRequest
0 голосов
/ 02 июня 2018

Я просто экспериментирую с EF Core и SQLite и был слегка озадачен этой проблемой.

Если я попытаюсь настроить базу данных следующим образом:

services.AddDbContext<MyDbContext>(options => options.UseSqlite("Filename=./App_Data/dashboard.db") );

И затем выполнить:

dotnet ef migrations add InitialCreate -c MyDbContext

Я получаю:

'Для этого DbContext не настроен поставщик базы данных'

Но если я сделаю это:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlite("Filename=./App_Data/dashboard.db");
}

Все работает, как и ожидалось.

Мой контекст настроен на работу с беглым интерфейсом:

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

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

Из разных статей видно, что в других работает свободный подходхорошо.

Кто-нибудь еще имел эту проблему и решил с помощью Core 2.1.0?

1 Ответ

0 голосов
/ 02 июня 2018

Я бы попробовал добавить фабрику контекста БД времени разработки в ваш проект, например так:

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;

namespace yournamespace
{
    public class YourDbContextDesignTimeFactory : IDesignTimeDbContextFactory<YourDbContext>
    {
        public YourDbContext CreateDbContext(string[] args)
        {
            var builder = new DbContextOptionsBuilder<YourDbContext>();
            builder.UseSqlite("Data Source=somename.db");

            return new YourDbContext(builder.Options);
        }
    }
}

Я не думаю, что строка соединения должна быть правильной, EF будет использовать это для создания контекста, когдагенерация миграции

...