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.Sqlite3.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 次 |
| 最近记录: |