使用Xamarin.Forms App

时间:2018-05-16 14:29:31

标签: sqlite xamarin xamarin.forms xamarin.ios sqlite.net

我的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.iOS中使用Xamarin.Forms。

1 个答案:

答案 0 :(得分:2)

默认情况下,您无法存储它们。但是,您可以使用sqlite-net-extensions来实现此目的。您可以查看 sqlite-net-extensions here

使用此扩展程序,您可以使用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的更多说明。

  

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

     

文本blobbed属性的序列化和开销很小   反序列化对象和一些限制,但是最好的方法   存储简单对象,如基本类型的列表或字典或   简单的关系。

     

text-blobbed属性需要声明的字符串属性   存储序列化对象。

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