我使用SQLite数据库使用.NET Core 2.2创建了ASP.NET MVC网站。到目前为止,它运行良好。当我想向连接字符串添加特定于SQLite的关键字时,麻烦就开始了,例如
Data Source=~\\App_Data\\MyDb.db; Version=3; DateTimeFormat=UnixEpoch; DateTimeKind=Utc
现在我得到
不支持关键字:“版本”
我这样注册数据库
// ConfigureServices(IServiceCollection services)
var conn = Configuration.GetConnectionString("MyDB").Replace("~", _env.ContentRootPath);
services.AddDbContext<MyDBContext>(options => options.UseSqlite(conn));
然后MyDBContext具有
public partial class MyDBContext : DbContext
{
public MyDBContext() { }
public SatrimonoContext(DbContextOptions<MyDBContext> options)
: base(options) { }
public virtual DbSet<Book> Book { get; set; }
}
然后我在页面模型中使用它
private SatrimonoContext _db;
public BookAccuracyListModel(SatrimonoContext dbContext)
{
_db = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
}
从那里我通常可以通过LINQ访问_db。
在此之前,我对该主题进行了大量研究,发现最好的回复是this
此提供程序是Microsoft.Data.Sqlite。这些连接字符串是 用于System.Data.SQLite。
我们支持以下关键字:缓存,数据源,模式。
和this
我遇到的问题是因为我试图创建一个 SqlConnection代替SQLiteConnection。做出改变 我的问题。
但是,如果我“正确”地进行操作,则不会创建SqlConnection,因此无法将其更改为SQLiteConnection。另一个回应不包括解决方案。
那么如何使它正确工作?
答案 0 :(得分:3)
Github中有一个与此问题有关的话题。
Microsoft.Data.Sqlite
仅支持三个关键字:
此命名空间不支持其他任何关键字,但是,如果您使用在System.Data.SQLite
命名空间中提到的关键字,它将可以工作,因为它们是与System.Data.SQLite
匹配的关键字。
您的两个选择:
Version=3
关键字或任何其他不受支持的关键字答案 1 :(得分:1)
扩展Barr的响应,解决方案是将System.Data.SQLite.Core添加到项目中。
然后替换
var conn = Configuration.GetConnectionString("Satrimono").Replace("~", _env.ContentRootPath);
services.AddDbContext<SatrimonoContext>(options => options.UseSqlite(conn));
使用
var connString = Configuration.GetConnectionString("Satrimono").Replace("~", _env.ContentRootPath);
var conn = new SQLiteConnection(connString);
services.AddDbContext<SatrimonoContext>(options => options.UseSqlite(conn));
就是这样!