'没有为此DbContext配置数据库提供程序'使用SQLite

时间:2018-06-02 13:09:30

标签: c# sqlite asp.net-core entity-framework-core entity-framework-core-2.1

我只是在试验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 :(得分:0)

我会尝试将设计时数据库上下文工厂添加到您的项目中,如下所示:

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会在生成迁移时使用它来创建上下文