C# 我可以在用于SQLite的类中使用字符串列表吗?

C# 我可以在用于SQLite的类中使用字符串列表吗?,c#,sqlite,type-conversion,windows-store-apps,sqlite-net,C#,Sqlite,Type Conversion,Windows Store Apps,Sqlite Net,SQLite net将用于表示表的类中使用的数据类型有哪些限制?具体来说,我可以使用这个: public List<string> CoconutWaterBrands { get; set; } …还是别的什么?ORMs(又称抽象泄漏)将出现这种问题。类中的字段将对应于表中的列。如果您使用列表或数组,那么ORM将不得不以某种方式将列表中的这些值合并到一个列中,因此它必须选择某种分隔符,如果分隔符出现在字符串值中,最终您将慢慢发现自己处于兔子洞中 我认为SQLite net不支持数

SQLite net将用于表示表的类中使用的数据类型有哪些限制?具体来说,我可以使用这个:

public List<string> CoconutWaterBrands { get; set; }
…还是别的什么?

ORMs(又称抽象泄漏)将出现这种问题。类中的字段将对应于表中的列。如果您使用列表或数组,那么ORM将不得不以某种方式将列表中的这些值合并到一个列中,因此它必须选择某种分隔符,如果分隔符出现在字符串值中,最终您将慢慢发现自己处于兔子洞中


我认为SQLite net不支持数组/列表。您将需要使用字符串(并根据需要拆分和联接它)或创建一个新表来表示一对多关系

要为这个问题提供更具体的解决方案,可以使用Newtonsoft.Json序列化为Json blob:

私人串椰子品牌;
[忽略]
公开上市椰子品牌{
得到
{
返回JsonConvert.DeserializeObject(coconutWaterBrands);
} 
设置
{
coconutWaterBrands=JsonConvert.SerializeObject(值);
}
}

与Sandy的答案类似,在序列化/反序列化列表方面,您可以使用。例如,在模型类中:

public class SomethingToDoWithCoconuts
{
    [TextBlob(nameof(CoconutWaterBrandsBlobbed))]
    public List<string> CoconutWaterBrands { get; set; }
    public string CoconutWaterBrandsBlobbed { get; set; } // serialized CoconutWaterBrands
}
public class something todow with coconuts
{
[TextBlob(名称(椰子树品牌))]
公共列表椰子品牌{get;set;}
公共字符串CoconutWaterBrandsBlobbed{get;set;}//序列化的CoconutWaterBrands
}
从:

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

文本blobbed属性在序列化和反序列化对象方面有一些开销和限制,但却是存储简单对象(如基本类型或简单关系的列表或字典)的最佳方式。 文本blobbed属性需要一个声明的字符串属性,序列化对象存储在该属性中

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

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


由于C#6,您还可以编写
[TextBlob(nameof(CoconutWaterBrandsBlobbed))]
,使其更不容易出错,也更易于重构。可能不需要使用[Ignore],或者您需要另一个属性来进行(反)序列化。
private string coconutWaterBrands;

[Ignore]
public List<string> CoconutWaterBrands { 
    get
    {
        return JsonConvert.DeserializeObject<List<string>>(coconutWaterBrands);
    } 
    set
    {
        coconutWaterBrands = JsonConvert.SerializeObject(value);
    }
}
public class SomethingToDoWithCoconuts
{
    [TextBlob(nameof(CoconutWaterBrandsBlobbed))]
    public List<string> CoconutWaterBrands { get; set; }
    public string CoconutWaterBrandsBlobbed { get; set; } // serialized CoconutWaterBrands
}