Использование модели с общим списком и хранилищем в 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(...)- все элементы списка доступны.