我只是在试验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解决了问题?
答案 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会在生成迁移时使用它来创建上下文