对于SQLite-net将用于表示表的类中使用的数据类型有什么限制?具体来说,我可以用这个:我可以在用于SQLite的类中使用字符串列表吗?
public List<string> CoconutWaterBrands { get; set; }
...或者我需要这样的:
public string[] CoconutWaterBrands { get; set; }
...还是其他什么东西完全?
对于SQLite-net将用于表示表的类中使用的数据类型有什么限制?具体来说,我可以用这个:我可以在用于SQLite的类中使用字符串列表吗?
public List<string> CoconutWaterBrands { get; set; }
...或者我需要这样的:
public string[] CoconutWaterBrands { get; set; }
...还是其他什么东西完全?
ORMs(aka abstraction leak)会有这样的问题。该类中的字段将与表中的列相对应。如果使用List或数组,那么ORM将不得不以某种方式将列表中的这些值合并到一个列中,因为它必须选择某种分隔符,以及如果分隔符出现在字符串值中,最终会慢慢找到你自己的兔子洞。
我不认为SQLite-net支持数组/列表。您将需要使用字符串(并根据需要拆分并加入)或创建一个新表来表示一对多关系。
为了提供更具体的解决问题的办法,你可以使用Newtonsoft.Json序列化到JSON BLOB:
即
private string coconutWaterBrands;
[Ignore]
public List<string> CoconutWaterBrands {
get
{
return JsonConvert.DeserializeObject<List<string>>(coconutWaterBrands);
}
set
{
coconutWaterBrands = JsonConvert.SerializeObject(value);
}
}
桑迪的答案类似,在序列化/反序列化的列表而言,你可以使用Text blobbed properties
从SQLite-Net Extensions library。因此,例如在你的模型类:
public class SomethingToDoWithCoconuts
{
[TextBlob(nameof(CoconutWaterBrandsBlobbed))]
public List<string> CoconutWaterBrands { get; set; }
public string CoconutWaterBrandsBlobbed { get; set; } // serialized CoconutWaterBrands
}
从documentation on Text blobbed properties:保存和加载时反序列化时
文本blobbed属性被序列化到一个文本属性。这允许将简单对象存储在同一个表中的单个列中。
文本blobbed属性有一个序列化和反序列化对象和一些限制的小开销,但是存储简单对象(如List或Dictionary)的基本类型或简单关系的最佳方法。 文本blobbed属性需要存储序列化对象的声明字符串属性。
文本blobbed属性不能与其他对象建立关系,也不能与其父对象建立反向关系。
如果没有使用TextBlobOperations.SetTextSerializer方法指定其他序列化程序,则使用基于JSON的序列化程序。要使用JSON序列化程序,必须在项目中包含对Newtonsoft Json.Net库的引用,也可以作为NuGet程序包使用。
并且自C#6以来,您还可以编写'[TextBlob(nameof(CoconutWaterBrandsBlondsBlobbed))]',使其更容易出错并且更加可重构。 –
很酷,绝对不容易出错。 –
那么可能不是[忽略],或者你需要另一个属性来获取它(序列化)。 – jv42