代码之家  ›  专栏  ›  技术社区  ›  Jammer

“未使用SQLite为此DbContext配置数据库提供程序”

  •  1
  • Jammer  · 技术社区  · 8 年前

    我只是在用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)
    {
    }
    

    从各种文章看来,其他人都有流畅的方法工作良好。

    有没有其他人在使用Core2.1.0时遇到过这个问题并得到了解决?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Joe Audette    8 年前

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

    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);
            }
        }
    }