11

让我们假设我有这两个对象

class Customer {
   [PrimaryKey]
   public string id;
   [??????]
   public List<int> addresses;
}

class Address {
     [PrimaryKey, AutoIncrement]
     public int id;
     public string street;
     public int number;
}

有没有办法使用 SQLite.NET ORM 来保存客户对象?因为我很难保存列表。

如果没有这样的方法,是否有某种我可以实现的事件或我可以覆盖的方法,以便在加载对象时触发代码?

我正在考虑在地址列表上方添加 [Ignore] 的思路,当事件触发时,我可以使用 SQLite.net 从另一个表中加载地址的 ID

提前感谢您提供的任何帮助

4

1 回答 1

15

在这里看看这个答案

您可以使用SQLite-Net Extensions 库中的 Text blobbed 属性来实现

因此,例如在您的 Model 类中:

public class Customer 
{
   [PrimaryKey]
   public string id;
   [TextBlob("addressesBlobbed")]
   public List<int> addresses { get; set; }
   public string addressesBlobbed { get; set; } // serialized CoconutWaterBrands
}

来自关于 Text blobbed 属性的文档:

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

Text-blobbed 属性在序列化和反序列化对象方面有少量开销和一些限制,但它是存储简单对象(如基本类型或简单关系的 List 或 Dictionary)的最佳方式。文本块属性需要一个声明的字符串属性,其中存储了序列化的对象。

文本块属性不能与其他对象有关系,也不能与其父对象有反向关系。

如果没有使用 TextBlobOperations.SetTextSerializer 方法指定其他序列化程序,则使用基于 JSON 的序列化程序。要使用 JSON 序列化程序,项目中必须包含对 Newtonsoft Json.Net 库的引用,也可以作为 NuGet 包提供。

希望这可以帮助。

于 2016-04-25T21:20:49.883 回答