我和弗兰克A.克鲁格的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
是一个不适用于ASP.NET平台的PCL库调用?)
有没有办法在ASP.NET Web应用程序中运行SQLite.net PCL,或者我将不得不寻找不同的数据源?
答案 0 :(得分:3)
这可以通过安装nuGet包Microsoft.EntityFrameworkCore.Sqlite(请注意,而不是Microsoft.EntityFrameworkCore.Sqlite.Core)来解决
答案 1 :(得分:1)
我有同样的问题,我通过导入修复它
SQLitePCLRaw.bundle_e_sqlite3
SQLitePCLRaw.bundle_sqlcipher
SQLitePCLRaw.bundle_green
参考
https://github.com/ericsink/SQLitePCL.raw/wiki/SQLitePCL.Batteries.Init
答案 2 :(得分:0)
您是否尝试过在项目中添加一个SQLitePCLRaw包?
我发现在构建一个引用了一个本身引用SQLite-net的Portable项目的UWP项目时,这是必需的。 解决方案中的两个项目都需要一个SQLitePCLRaw包,以便执行对Batteries.Init()的调用。
异常消息中的此设置有一个线索。
答案 3 :(得分:0)
我发现的当前解决方案是我必须像下面这样称呼...
尽管我对解决方案不满意,但我想进行深入研究,但现在继续使用该解决方案-
<script>
document.getElementById('select-country').addEventListener('change', function () {
document.getElementById('select-capital').getElementsByTagName('option')[this.selectedIndex].selected = true;
});
</script>
答案 4 :(得分:0)
可能是我上面的答案,将在流程开始工作时帮助某人
后来发现了更多的问题,在本例中的窗口应用程序bin文件夹中,主项目的bin文件夹中没有很少的Dll
我是WPF和WCF项目,所以总是将Dll复制到WCF输出而不是WPF输出
为解决此问题,我将包含e_sqlite3.dll二进制文件的x64,x86文件夹复制到了项目根目录 现在转到Visual Studio,然后单击x64,x86文件夹中的文件,然后选择 复制到输出目录副本(如果较新
缺少的二进制文件-e_sqlite3.dll
答案 5 :(得分:0)
我最终通过替换
使它起作用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
的修复都按预期工作。