У нас есть проект Xamarin.Forms, в котором нужно было использовать локальную базу данных sqlite для хранения даты.Библиотека sqlite от EF Core использовалась для ее настройки разными разработчиками с разных компьютеров (против 2019).Первоначально он использовался с функцией Database.EnsureCreated()
, а затем с миграциями ядра ef.Все прошло гладко больше месяца.
На прошлой неделе приложение для Android неожиданно не запустилось ни на одном компьютере из-за ошибки в sqlite.Она показала следующую ошибку:
Фатальный сигнал 11 (SIGSEGV), код 1 (SEGV_MAPERR)
Я потратил некоторое время на попытки исправления всех типов и откатов, думая, что это былопроблема с кодом.Это включало следующее:
- Удалены папки obj и bin, очищены и перестроены для всех следующих шагов.
- Понизили версию ef до 2.2.3 (версия, с которой мы начали)
- Откат к git фиксирует до недели назад
- Обновлены версии зависимостей ef core
- Удалены последние несколько миграций
- Понижены формы xamarinдо 3.6.x
Попробовав вышеперечисленное и несколько других исправлений, наконец-то обновили версии java и android SDK, которые работали в прошлую пятницу (на всех ПК).Как только это исправление сработало, в этот день все прошло гладко.Во вторник проблема снова вернулась (никаких обновлений библиотеки или изменений кода).Более глубокий взгляд на регистрацию EF Cores показывает, что она падает в тот момент, когда пытается подключиться к БД.
Проблема может быть воспроизведена на устройствах Android, но не на эмуляторах.Я не уверен, есть ли какое-то новое разрешение в Android, которое мы должны запросить.
Наконец-то я создал новый проект форм xamarin с настройкой sqlite.Я использовал библиотеку pcl и ядро ef.Я все еще нашел ту же ошибку.
Вот git-хаб, который повторяет проблему https://github.com/neville-nazerane/xamarin-site
Обновление
Просто то, что я заметил.Ранее файл моей базы данных назывался "main.db".Теперь независимо от того, что я изменяю это имя файла или независимо от того, какие переменные я изменяю.он всегда показывает имя базы данных как «главное» в журналах.Не уверен, что изменение имени базы данных решит проблему.Однако, никогда не находил способ изменить это имя БД.Я пробовал разные строки подключения, он просто сказал, что «database» и «db» были неизвестными ключами
Update
Шаги для репликации:
using (var db = new AppDbContext())
{
db.Add(new Person {
Age = 55,
Name = "Neville"
});
db.SaveChanges();
Person[] alldata = db.People.ToArray();
}
Определения Person
и AppDbContext
довольно очевидны.Таким образом, с духом не делая вопрос слишком длинным, я не размещаю это здесь.Тем не менее, при необходимости я могу опубликовать их тоже.