Я строю новый проект, используя Xamarin.Forms, и я хотел использовать SQLite для хранения пользовательских данных.Я использую .Net стандартный проект.Я установил пакет NuGet sqlite-net-pcl Фрэнка А. Крюгера во всех 4 проектах (общий код, droid, ios и uwp).Я создал интерфейс IFileHelper и класс, реализующий этот интерфейс во всех проектах, точно так же, как в документации.Когда я впервые запускаю приложение, я хочу вставить некоторые значения по умолчанию в базу данных, но я просто получаю исключение.Я отлаживал, и когда база данных создается в документе App.xaml.cs, он просто возвращает ноль, поэтому я не получаю никакой базы данных.
Я проверял весь код снова и снова и всехорошо, так что мне просто интересно, совместим ли sqlite-net-pcl со стандартными проектами .NET?Есть ли какое-либо решение для этой проблемы?
Это код на App.xaml.cs
static AppDatabase database;
public App ()
{
InitializeComponent();
MainPage = new MainPage();
}
public static AppDatabase Database
{
get
{
if (database == null)
{
database = new AppDatabase(DependencyService.Get<IFileHelper>().GetLocalFilePath("AppDatabase.db3"));
System.Threading.Thread.Sleep(500);
}
return database;
}
}
I, когда я возвращаю базу данных, он просто возвращает ноль, поэтому, когда я создаютаблица в классе AppDatabase, я получаю исключение System.AggregateException: One or more errors occurred.
readonly SQLiteAsyncConnection Database;
public AppDatabase(string dbPath)
{
Database = new SQLiteAsyncConnection(dbPath);
Database.CreateTableAsync<Stats>().Wait();
}
Я понимаю исключение, так как база данных пуста, я не могу агрегировать никакие таблицы или что-либо вообще, так как база данных не существует, но почему он не создает базу данных?
Это интерфейс для общего кода
namespace FitApp
{
public interface IFileHelper
{
string GetLocalFilePath(string fileName);
}
}
И класс, реализующий интерфейс в проекте droid:
[assembly: Dependency(typeof(FitApp.Droid.FileHelper))]
namespace FitApp.Droid
{
public class FileHelper : IFileHelper
{
public string GetLocalFilePath(string fileName)
{
string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
return System.IO.Path.Combine(path, fileName);
}
}
}
Спасибо