我可以在用于SQLite的类中使用String列表吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以在用于SQLite的类中使用String列表吗?相关的知识,希望对你有一定的参考价值。
SQLite-net将用于表示表的类中使用的数据类型有哪些限制?具体来说,我可以使用这个:
public List<string> CoconutWaterBrands { get; set; }
......或者我需要这个:
public string[] CoconutWaterBrands { get; set; }
......还是别的什么?
ORM(又名抽象泄漏)会产生这种问题。类中的字段将对应于表中的列。如果你使用List或数组,那么ORM必须以某种方式将列表中的这些值组合在一个列中,因为它必须选择某种分隔符,如果分隔符出现在你的字符串值中,最终你会在兔子洞里慢慢找到你的自我。
我不认为SQLite-net支持数组/列表。您将需要使用字符串(并根据需要拆分并加入它)或创建一个新表来表示一对多关系。
与Sandy的答案类似,在序列化/反序列化列表方面,您可以使用Text blobbed properties
中的SQLite-Net Extensions library。例如,在您的Model类中:
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等简单对象或简单关系的最佳方法。 Text-blobbed属性需要一个声明的字符串属性,其中存储了序列化对象。
文本blobbed属性不能与其他对象建立关系,也不能与其父对象建立反向关系。
如果未使用TextBlobOperations.SetTextSerializer方法指定其他序列化程序,则使用基于JSON的序列化程序。要使用JSON序列化程序,必须在项目中包含对Newtonsoft Json.Net库的引用,也可以作为NuGet包使用。
要为问题提供更具体的解决方案,可以使用Newtonsoft.Json序列化为JSON blob:
即
private string coconutWaterBrands;
[Ignore]
public List<string> CoconutWaterBrands {
get
{
return JsonConvert.DeserializeObject<List<string>>(coconutWaterBrands);
}
set
{
coconutWaterBrands = JsonConvert.SerializeObject(value);
}
}
以上是关于我可以在用于SQLite的类中使用String列表吗?的主要内容,如果未能解决你的问题,请参考以下文章
Factory Pattern用于实例化Factory类中的类
如何关联两个不相关的类,以便它们可以在抽象类中用于相同的方法
通过另一个类中的列表输出数据库信息 - Eclipse Android SQLite
我可以在flift的sqlite表中插入双精度或字符串列表吗?
实现一个名为Person的类和它的子类Employee, Manager是Employee的子类,设计一个接口Add用于涨工资,普通