【问题标题】:how to manage frequent and complex poco changes to database structure如何管理对数据库结构的频繁和复杂的 poco 更改
【发布时间】:2013-06-08 05:53:41
【问题描述】:

为了解决对 poco 类的不断更改,我们将 poco 序列化为 json 字符串,然后将它们存储到 sql 数据库中的 nvarchar 列中。

但是,我们发现这种方法难以管理。当结构发生变化时,我们必须手动更改 json 字符串,以便 json 序列化器可以再次反序列化它。

有没有人能很好地解决这个问题?

我们是否应该放弃 json 的想法并开始以与其他 poco 类似的方式存储 poco,我们首先使用代码并使用 sql 脚本管理更改以更新数据库列

【问题讨论】:

  • 您是否考虑过使用 EF 代码优先迁移?我原以为尝试将数据序列化为 JSON 会消除使用 SQL 数据库的大部分好处,并且可能会产生与解决的问题一样多的问题。众多 No-SQL 文档数据库中的哪一个呢?
  • 考虑 EAV 模型是否适合您。 stackoverflow.com/questions/5497153/…

标签: c# .net json entity-framework


【解决方案1】:

您可以更改方法并使用 SQL Server 的原生功能:使用 XML column 而不是 nvarchar 列。此 XML 列的使用方式与您的 nvarchar 列相同(它将包含序列化为 XML 而不是 JSON 的对象属性),并且可以使用 SQL 查询。您可以使用standard XmlSerializer 获取要存储在列中的 XML,或者编写自己的简单 XML 序列化引擎来准确选择要序列化的属性以及序列化方式。

当您提取(检索)列数据时,您可以非常简单地将其反序列化回您的数据对象,以一种非常通用和宽容的方式(即序列化 XML 中的每个节点将代表目标对象上的一个属性 - 只需迭代这个并使用反射)。

这种方法在存储不同对象或频繁更改对象到同一个表时非常有用,也可以认为是具有multivalueddatabase 结构的近似值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2011-06-14
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多