[英]Cannot run SQLite.net PCL in ASP.NET MVC
我正在和Frank A. Krueger的SQLite.net PCL擦肩而过 。 我试图将它用作Android应用程序和ASP.NET MVC Web应用程序的公共数据层。 我在使用Android方面取得了一些成功,但在尝试将其用于Web应用程序时,我得到以下异常:
You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init().
所以,我在控制器的构造函数中调用此Init
函数,以及数据库初始化:
SQLitePCL.Batteries.Init();
var dbPath = Path.Combine(Constants.DataDir, "SdgData.sqlite3");
var sqliteConnection = new SQLiteConnection(dbPath);
var sdgSqlRepository = new SdgSqlRepository(sqliteConnection);
crm = new CrmManager(sdgSqlRepository);
然而,好像Init
甚至没有被调用 - 我在它上面设置了一个断点以及调用Combine
的下一行,而第二行是在没有第一个被注意的情况下被击中。 (可能是因为Init
是PCL库调用不适用于ASP.NET平台?)
有没有办法在ASP.NET Web应用程序中运行SQLite.net PCL,或者我将不得不寻找不同的数据源?
这可以通过安装nuGet包Microsoft.EntityFrameworkCore.Sqlite来修复(注意,不是Microsoft.EntityFrameworkCore.Sqlite.Core)
我有同样的问题,我通过导入修复它
SQLitePCLRaw.bundle_e_sqlite3
SQLitePCLRaw.bundle_sqlcipher
SQLitePCLRaw.bundle_green
参考
https://github.com/ericsink/SQLitePCL.raw/wiki/SQLitePCL.Batteries.Init
您是否尝试过将SQLitePCLRaw包中的一个添加到项目中?
我发现在构建引用了一个本身引用SQLite-net的Portable项目的UWP项目时,这是必需的。 解决方案中的两个项目都需要一个SQLitePCLRaw包,以便执行对Batteries.Init()的调用。
异常消息中的此设置有一个线索。
我发现当前的解决方案是我必须像下面这样称呼它...
虽然我对解决方案不满意,但我想深入挖掘,但现在继续推进这个解决方案 -
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string dbPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlite($@"Data Source={dbPath}\sqlite\.sample.sqlite");
Batteries.Init();
base.OnConfiguring(optionsBuilder);
}
}
我最终通过更换来实现这一目标
SQLitePCL.Batteries.Init();
同
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
(参见https://github.com/ericsink/SQLitePCL.raw/wiki/SQLitePCL.Batteries.Init )
但是,我最近检查了旧代码,试图回溯我的步骤以验证以前的一些答案。 我收到以下错误:
System.DllNotFoundException -- Unable to load DLL 'e_sqlite3': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
看一些(例如https://github.com/ErikEJ/SqlCeToolbox/issues/599 ),似乎这个问题的解决方案是简单地更新sqlite-net。 我更新到最新的稳定版本(1.5.231,在1.2.0),并且对Init
的原始调用以及我之前使用SetProvider
修复SetProvider
按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.