为了解决我们所拥有的poco类的不断变化,我们将poco序列化为json字符串,然后将它们存储到sql数据库中的nvarchar列中。
但是,我们发现这种方法难以管理。当结构改变时,我们必须手动改变json字符串,以便json序列化器可以再次反序列化它。
有没有人能很好地解决这个问题?
我们应该放弃json的想法并开始以与其他pocos类似的方式存储poco,我们首先使用代码并使用sql脚本管理更改以更新数据库列
答案 0 :(得分:2)
您可以更改方法并使用SQL Server本机的功能:使用XML column而不是nvarchar列。此XML列的使用方式与nvarchar列相同(它将包含序列化为XML而不是JSON的对象属性),并且可以使用SQL 进行查询。您可以使用standard XmlSerializer获取要存储在列中的XML,也可以编写自己的简单XML序列化引擎来精确选择要序列化的属性和方式。
当您提取(检索)列数据时,您可以非常简单地将其反序列化回数据对象(即序列化XML中的每个节点都代表目标对象上的属性 - 只需迭代此并使用反射)。
这种方法在将不同的对象或频繁更改的对象存储到同一个表中时非常有用,并且也可以被认为是具有multivalued database结构的近似值。