【发布时间】:2019-10-14 18:03:23
【问题描述】:
我们有一个需要使用 sqlite 本地数据库来存储日期的 Xamarin.Forms 项目。 EF Core 的 sqlite 库用于设置它,并且由来自不同 PC 的不同开发人员(与 2019 年相比)使用。最初,它与 Database.EnsureCreated() 函数一起使用,后来与 ef 核心的迁移一起使用。一个多月来一切都很顺利。
上周,由于 sqlite 的一些错误,Android 应用程序突然无法在任何人的 PC 上启动。它显示以下错误:
致命信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)
我花了一段时间尝试各种修复和回滚,认为这是代码的问题。这包括以下内容:
- 已删除 obj 和 bin 文件夹,清理并重建以下所有步骤。
- 将 ef 的版本降级为 2.2.3(我们开始使用的版本)
- 回滚到一周前的 git 提交
- 升级了ef core的依赖版本
- 删除了过去的几次迁移
- 将 xamarin 形式降级为 3.6.x
在尝试了上述和其他几个修复后,终于在上周五升级了 java 和 android SDK 的版本(在所有 PC 上)。一旦这个修复工作,那天一切都很顺利。周二问题再次出现(没有库更新或代码更改)。深入了解 EF Cores 日志记录表明它在尝试连接到数据库时崩溃。
这个问题可以在安卓设备上复制,但不能在模拟器上复制。我不确定我们需要请求的android中是否有一些新的权限。
我终于用 sqlite 设置创建了一个新的 xamarin 表单项目。我使用了 pcl 库和 ef 核心。我仍然发现了同样的错误。
这里是复制问题的 git hub https://github.com/neville-nazerane/xamarin-site
更新
我注意到了。之前我的数据库文件被命名为“main.db”。现在,无论我将此文件名更改为什么,或者无论我更改什么变量。它总是在日志中将数据库名称显示为“main”。不确定更改数据库名称是否可以解决问题。但是,从未找到更改此数据库名称的方法。我尝试了不同的连接字符串,它只是说“数据库”和“数据库”是未知键
更新
复制步骤:
using (var db = new AppDbContext())
{
db.Add(new Person {
Age = 55,
Name = "Neville"
});
db.SaveChanges();
Person[] alldata = db.People.ToArray();
}
Person 和AppDbContext 的定义非常明显。因此,本着不让问题太长的精神,我不会在这里发布。但是,如果需要,我也可以发布它们。
【问题讨论】:
-
您是否在模拟器和设备上检查了“FileSystem.AppDataDirectory”返回的文件路径,这很有可能在较新版本的 androids OS 中工作方式不同。
-
感谢@Digitalsa1nt,但我已经在我的手机和 2 个不同的模拟器中尝试过了。他们有完全相同的字符串。其中一个模拟器也有 android 9.0 API 28,和我的手机一样。它仍然适用于两个模拟器,而不是我的手机
-
我的项目也是如此!!!我记得周五早上我在测试 iOS 项目,做了一些调整。到了晚上,它停止在 Android 上运行。
-
我记得最近重启了我的手机以安装更新。我不记得我到底是什么时候这样做的。
-
顺便说一句,从 VS 16.1.4 开始,我可以再次调试我的应用程序了。
标签: xamarin.forms xamarin.android entity-framework-core sqlite-net-pcl