База данных SQLite.net с приложением Xamarin.Forms

У меня проблема с базой данных SQLite в моем проекте Xamarin.Forms PCL. Я последовал этому примеру из Microsoft Docs:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/databases

Я использовал свои собственные типы для хранения данных, и он работал нормально для простых настраиваемых типов, но недавно я добавил List<int> и тип посещаемости в настраиваемый объект (Информация).

Теперь, когда я пытаюсь создать объект, я получаю следующие ошибки:

Не знаю о System.Collections.Generic.List`1 [System.Int32] Не знаю о MyApp.Attendance

Вот код инициализации:

readonly SQLiteAsyncConnection database;
database = new SQLiteAsyncConnection(dbPath);
database.CreateTableAsync<UserPrefrences>().Wait();
database.CreateTableAsync<Attendance>().Wait();
database.CreateTableAsync<Info>().Wait();

Я использую Xamarin.Forms с Xamarin.iOS.


person the_tr00per    schedule 16.05.2018    source источник


Ответы (1)


По умолчанию так их хранить нельзя. Однако есть sqlite-net-extensions, которые вы можете использовать для этого. Вы можете узнать о sqlite-net-extensions здесь.

Используя это расширение, вы сможете сделать это с помощью свойства TextBlob, примерно так:

public class Address
{
     public string StreetName { get; set; }
     public string Number { get; set; }
     public string PostalCode { get; set; }
     public string Country { get; set; }
}

public class Person
{
     public string Name { get; set; }

     [TextBlob("PhonesBlobbed")]
     public List<string> PhoneNumbers { get; set; }

     [TextBlob("AddressesBlobbed")]
     public List<Address> Addresses { get; set; }

     public string PhonesBlobbed { get; set; } // serialized phone numbers
     public string AddressesBlobbed { get; set; } // serialized addresses
  }

Дополнительные сведения о TextBlob см. По url.

Свойства с текстовыми blob-объектами Свойства с текстовыми blob-объектами сериализуются в текстовое свойство при сохранении и десериализовываются при загрузке. Это позволяет хранить простые объекты в одной таблице в одном столбце.

Свойства с текстовыми каплями имеют небольшие накладные расходы на сериализацию и десериализацию объектов и некоторые ограничения, но это лучший способ хранить простые объекты, такие как List или Dictionary базовых типов или простых отношений.

Для свойств с текстовыми каплями требуется объявленное строковое свойство, в котором хранится сериализованный объект.

Я только что увидел, что на StackOverflow уже есть похожие / те же вопросы по этой теме, так что вы также можете взглянуть на них.

person Almir Vuk    schedule 16.05.2018