我们有一个需要使用 sqlite 本地数据库来存储日期的 Xamarin.Forms 项目。EF Core 的 sqlite 库用于设置此功能,并且由来自不同 PC 的不同开发人员(与 2019 年相比)使用。最初,它与Database.EnsureCreated()函数一起使用,后来与 ef core 的迁移一起使用。一个多月来一切都很顺利。
上周,由于 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 设备上复制,但不能在模拟器上复制。我不确定我们需要请求的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非常明显。因此,本着不让问题太长的精神,我不会在这里发布。但是,如果需要,我也可以发布它们。

