2

我的 Xamarin.Forms PCL 项目中的 SQLite 数据库有问题。我遵循了 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 一起使用。

4

1 回答 1

4

默认情况下,您不能像那样存储它们。但是,您可以使用 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
  }

来自url的有关 TextBlob 的更多解释。

文本块状属性 文本块状属性在保存时被序列化为文本属性,并在加载时被反序列化。这允许将简单对象存储在同一表中的单个列中。

Text-blobbed 属性在序列化和反序列化对象方面有少量开销和一些限制,但它是存储简单对象(如基本类型或简单关系的 List 或 Dictionary)的最佳方式。

文本块属性需要一个声明的字符串属性,其中存储了序列化的对象。

我刚刚看到 StackOverflow 上已经有关于这个主题的类似/相同的问题,所以你也可以看看它们。

于 2018-05-16T14:36:27.407 回答