Использование модели с общим списком и хранилищем в SQLite 3.

Я хотел использоватьв моей модели в моем приложении .NET MAUI и сохраните ее в моей базе данных SQLite 3.

Когда я использую следующую модель и пытаюсь вставить ее с помощьюЯ получаю сообщение об ошибке, что таблица не существует.

      [Table("MyItemStorageTable")]
public class MyItemStorage
{
    [PrimaryKey, AutoIncrement]     // Primary Key already indexed in Table
    public int Id { get; set; }

    [Unique]                        // Primary Key combined with ID
    public string Name { get; set; }

    public string Brand { get; set;}
    
    public List<MyItem> MyItemList { get; set; }

}

Ну ладно, он хочет сохранить эти элементы списка в отдельной таблице.

Какова ваша рекомендация это сделать? Я не хочу делать много ручной работы, чтобы синхронизировать эти две таблицы, и иметь в фоновом режиме много кода, который делает это.

Ожидали ли вы, что OR Mapper справится с этим самостоятельно?

Каков предпочтительный способ справиться с этим?

========== Редактировать: следующие модели и нет записи в списке ==========

Извините, но в моем приложении .NET-MAUI это не сработало. Я установил следующий NuGet SQLite.Net.Extensions.Async (3.0.1) и изменил свои модели следующим образом:

      [Table("MyItemStorageTable")]
public class MyItemStorage
{
    [PrimaryKey, AutoIncrement]     // Primary Key already indexed in Table
    public int Id { get; set; }

    [Unique]                        // Primary Key combined with ID
    public string Name { get; set; }

    public string Brand { get; set;}
    
    [OneToMany]    // One MyItemStorage can have many MyItem
    public List<MyItem> MyItemList { get; set; }

}
      [Table("MyItemTable")]
public class MyItem
{
    [PrimaryKey, AutoIncrement]     // Primary Key already indexed in Table
    public int Id { get; set; }

    [Unique]                        // Primary Key combined with ID
    public string Name { get; set; }
}
      //[Table("MyItemStorageMyItems")]
public class MyItemStorageMyItems
{
    //[PrimaryKey, AutoIncrement]
    //public int Id { get; set; }

    [ForeignKey(typeof(MyItemStorage))]
    public int MyItemStorageId { get; set; }

    [ForeignKey(typeof(MyItem))]
    public int MyItemId { get; set; }
}

Init() моей службы базы данных

      static async Task Init()
{
    if (Database is not null)
    {
        return;
    }

    Database = new SQLiteAsyncConnection(Constants.DatabasePath, Constants.Flags);

    await Database.CreateTableAsync<MyItemStorageMyItems>();
    await Database.CreateTableAsync<MyItemStorage>();
    await Database.CreateTableAsync<MyItem>();
}

public static async Task AddMyItemStorage(MyItemStorage myItemStorage)
{
    await Init();

    await Database.InsertAsync(myItemStorage);
}

Прежде всего, когда я удаляю все таблицы и начинаю с нуля, я получаю исключение о том, что таблица MyItemStorage не существует , что странно, поскольку InsertAsync(...) должен ее создать. Когда я перезапускаю свое приложение, оно больше не генерирует эту ошибку.

К сожалению, таблица MyItemStorageMyItems не отображает никаких значений, но MyItemStorage показывает записи. Итак, список не сохранен.

Что я здесь делаю не так? И прежде чем спрашивать, я проверил метод DatabaseService.AddMyItemStorage(...)- все элементы списка доступны.

0 ответов

Другие вопросы по тегам