我正在尝试使用新的Entity Framework Core创建一个Xamarin Forms App。该应用程序针对Android 6.0但我的模拟器运行的是Android 7.0。我在android项目上安装了以下相关的Nuget包:
在Android上访问我的DbContext时,会弹出一条消息:检测到本机库未经授权访问“/system/lib/libsqlite.so”的问题。
This Xamarin论坛帖子暗示,这是由于原生SqLite二进制文件不再受支持(在Android 7上?),常见修复似乎是切换到SqLite.Net PCL。
然而,由于Microsoft.EntityFrameworkCore.Sqlite依赖于Microsoft.Data.Sqlite,而后者依赖于本机SqLite包,我不能只替换它(或者我可以吗?)
奇怪的是,尽管有错误信息提示,否则数据访问似乎有效。至少运行迁移并重复写入数据库将创建新的ID。
当然我可以废弃EF Core,但我想很多人将来会考虑将它用于Xamarin。如果有人能找到/知道修复就好了。
答案 0 :(得分:1)
我遇到了同样的问题。我使用以下库修复了这个问题:sqlite-net-pcl(版本1.2.0),SQLitePCLRaw.bundle_green,SQLitePCLRaw.core,SQLitePCLRaw.lib.e_sqlite3.android,SQLitePCLRaw.provider.e_sqlite3.android。
答案 1 :(得分:0)
Matheus Souza在那里有正确的想法。但是,安装SQLitePCL只是答案的一部分。以下是我最终解决这个问题的方法:
免责声明:这是一种“你可以做到,但它不漂亮” - 解决方案。如果你有时间,最好等待官方的Microsoft.EntityFrameworkCore.Sqlite 1.2.0版本。
This问题让我走上正轨。 EntityFrameworkCore的新(未发布)版本不再使用本机sqlite二进制文件,而是使用sqlite-net-pcl。这是我安装它的步骤:
将aspnetcore-dev branch添加到您的nuget供稿中。 Nuget 3:https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json
在Nuget中选中“显示预览版本”并将所有EntityFrameworkCore包更新(或重新安装)为“1.2.0 - preview”
(如果应用程序在部署时立即崩溃,请确保在Android项目高级构建选项中检查x64。这可能是未发布的)