我可以在用于SQLite的类中使用String列表吗?
SQLite-net将用于表示表的类中使用的数据类型有哪些限制? 具体来说,我可以使用这个:
public List CoconutWaterBrands { get; set; }
……或者我需要这个:
public string[] CoconutWaterBrands { get; set; }
……还是别的什么?
ORM(又名抽象泄漏)会产生这种问题。 类中的字段将对应于表中的列。 如果你使用List或数组,那么ORM必须以某种方式将列表中的那些值组合在一个列中,因为它必须选择某种分隔符,如果分隔符出现在你的字符串值中,最终你会在兔子洞里慢慢找到你的自我。
我不认为SQLite-net支持数组/列表。 您将需要使用字符串(并根据需要拆分并加入它)或创建一个新表来表示一对多关系。
与Sandy的答案类似,在序列化/反序列化列表方面,您可以使用SQLite-Net Extensions库中的 Text blobbed properties
。 例如,在您的Model类中:
public class SomethingToDoWithCoconuts { [TextBlob(nameof(CoconutWaterBrandsBlobbed))] public List CoconutWaterBrands { get; set; } public string CoconutWaterBrandsBlobbed { get; set; } // serialized CoconutWaterBrands }
从文本blobbed属性的文档 :
文本 – blobbed属性在加载时被序列化为文本属性,并在加载时反序列化。 这允许在单个列中将简单对象存储在同一个表中。
文本blobbed属性具有序列化和反序列化对象的一小部分开销和一些限制,但是存储简单对象(如List或Dictionary of basic types或简单关系)的最佳方法。 Text-blobbed属性需要一个声明的字符串属性,其中存储了序列化对象。
文本blobbed属性不能与其他对象建立关系,也不能与其父对象建立反向关系。
如果未使用TextBlobOperations.SetTextSerializer方法指定其他序列化程序,则使用基于JSON的序列化程序。 要使用JSON序列化程序,必须在项目中包含对Newtonsoft Json.Net库的引用,也可以作为NuGet包提供。
要为问题提供更具体的解决方案,可以使用Newtonsoft.Json序列化为JSON blob:
即
private string coconutWaterBrands; [Ignore] public List CoconutWaterBrands { get { return JsonConvert.DeserializeObject>(coconutWaterBrands); } set { coconutWaterBrands = JsonConvert.SerializeObject(value); } }
- 在应用程序启动时检测按住Ctrl键?
- TextBox.Text + =“string”; vs TextBox.AppendText(“string”);
- 使用窗口应用程序中的数据表或数据集在gridview中添加进度条
- 自定义字符串作为具有entity framework的主键
- ASP.NET中的SendAsync(异步电子邮件)和事件处理程序/生命周期?
- 如何在C#中覆盖WinForm UserControl中的方法和事件?
- 如何将ConcurrentDictionary转换为Dictionary?
- 将值传递给IValueConverter
- Response.redirect Onselectedindexchanged继续触发后