Tri*_*ner 18 c# sqlite entity-framework
我正在尝试为我的应用程序创建一个SQLite数据库,并遇到了这个错误.
System.Exception:'您需要调用SQLitePCL.raw.SetProvider().如果您正在使用捆绑包,则可以通过调用SQLitePCL.Batteries.Init()来完成.
我创建了一个简单的控制台应用程序,运行完全相同的代码进行创建,没有任何问题.代码看起来像这样!
using (var dataContext = new SampleDBContext())
{
dataContext.Accounts.Add(new Account() { AccountName = name, AccountBalance = balance });
}
public class SampleDBContext : DbContext
{
private static bool _created = false;
public SampleDBContext()
{
if (!_created)
{
_created = true;
Database.EnsureDeleted();
Database.EnsureCreated();
}
}
protected override void OnConfiguring(DbContextOptionsBuilder optionbuilder)
{
optionbuilder.UseSqlite(@"Data Source="Source folder"\Database.db");
}
public DbSet<Account> Accounts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这个问题吗?我在两个项目上安装了相同的Nuget Packages,两者之间的唯一区别是数据源和我用于数据库的POCO类.
谢谢.
编辑
我的程序目前包含一个Console application
引用a的程序.Net Framework Class Library
.在Console application
简单的有一个构造函数如下:
public Program()
{
using (var db = new FinancialContext())
{
db.Accounts.Add(new Account() { AccountName = "RBS", AccountBalance=20 });
}
}
Run Code Online (Sandbox Code Playgroud)
类库有一个FinancialContext,如下所示:
public class FinancialContext : DbContext
{
public DbSet<Account> Accounts { get; set; }
public FinancialContext()
{
# Database.EnsureDeleted();
Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionbuilder)
{
optionbuilder.UseSqlite(@"Data Source="Some Source Folder"\Database.db");
}
}
Run Code Online (Sandbox Code Playgroud)
上面的错误显示在#符号点,我编码的方式有问题吗?我真的想知道问题是什么,所以我可以正确地修复它而不是应用'修复'.另外我在评论中尝试了这个建议,但是把代码行SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
放在Console Application
给出的错误SQLitePCL
中不是在当前的上下文中,这让我觉得我错过了一个引用?
Ren*_*elm 28
当我试图避免任何其他依赖项并且去了Microsoft.EntityFrameworkCore.Sqlite.Core
包时,这发生在我身上.
您应该安装并使用该Microsoft.EntityFrameworkCore.Sqlite
包,它依赖于SQLitePCLRaw
包.
Ste*_*nko 13
安装Nuget Package
Microsoft.Data.Sqlite
(不是Microsoft.Data.Sqlite.Core
)。(我的版本是2.2.2)
并使用SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
connection = new SqliteConnection("Data Source = Sample.db");
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
connection.Open();
Run Code Online (Sandbox Code Playgroud)
但我建议nuget package
System.Data.SQLite
改用Microsoft.Data.Sqlite
Var*_*mus 10
我有这个非常确切的错误。事实证明我Microsoft.Data.Sqlite.Core
安装了软件包(2.2.4),但没有安装SQLitePCLRaw.bundle_winsqlite3
。
安装包SQLitePCLRaw.bundle_winsqlite3
(1.1.13)解决了这个问题。
小智 5
我在使用Microsoft.EntityFrameworkCore.Sqlite
3.1.10 版本时遇到了这个问题。上述解决方案对我不起作用。然后我修改了 My DbContext 如下(添加SQLitePCL.Batteries.Init();
到OnConfiguring
方法中),问题就消失了!
public class ApplicationDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=mydb.db");
SQLitePCL.Batteries.Init();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6105 次 |
最近记录: |