0

我正在尝试构建一个通过 XML 从另一个服务获取信息的 WCF 服务。XML 通常有 4 个元素,从 int、string 到 DateTime。我想动态构建服务,以便在获取 XML 时将其存储在数据库中。我不想硬编码代码中的类型和元素名称。如果有变化,我希望它动态地将它添加到数据库中这样做的最佳方法是什么?这是一个好习惯吗?还是我应该坚持只使用实体框架并为数据库设置一个模型并对元素名称和类型进行硬编码?

谢谢

:)

4

2 回答 2

0

像往常一样,“这取决于......”。

如果您收到的数据的性质是它没有固定的模式,或者作为其业务逻辑/域逻辑的一部分经常更改的模式,那么设计一个解决方案来管理它是一个好主意。存储您在设计时不知道其架构的数据是 StackOverflow 上长期存在的争论 - 查找“属性包”、“实体属性值”或 EAV 以查看各种问题和答案。

您放弃这种方法的是——在 Web 服务层——检查您接收的数据是否符合约定的接口合同的能力;这反过来又有助于避免各种令人兴奋的错误——如果您的系统收到无效的 XML,应该怎么办?如果没有约定的 schema/dtd,您必须在代码中构建各种其他检查。

在数据库级别,您通常最终会放弃关系模型的某些方面(以及 SQL 的强大功能)来存储您的数据,而无需“传统”的行列关系。这通常会使查询变得更加困难,并且可能会牺牲标准合规性(例如,通过使用供应商特定的扩展)。

如果数据因为技术原因而改变——即不是数据的性质改变,只是技术链让你担心这个——我建议你改为建立版本控制的概念,并有“强类型" 不同版本的服务/数据。虽然这似乎更有效,但依赖模式验证、关系数据库模型和简单性的好处通常使它成为一个很好的权衡......

于 2012-04-26T14:06:53.550 回答
0

将 xml 作为 xml 放入数据库。许多现代数据库直接支持 XML。如果没有,请将其存储为文本。

于 2012-04-26T14:33:27.710 回答