【问题标题】:'No database provider has been configured for this DbContext' using SQLite使用 SQLite '没有为此 DbContext 配置数据库提供程序'
【发布时间】:2018-11-12 09:54:35
【问题描述】:

我只是在试验 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 时遇到过这个问题并解决了吗?

【问题讨论】:

  • 您的 dbcontext 是在主 Web 应用程序中还是在单独的类库中?
  • 它在主应用程序中。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2019-02-17
    • 2021-05-04
    • 2016-11-15
    • 2018-12-15
    • 2020-06-16
    • 1970-01-01
    相关资源
    最近更新 更多