2012-04-26 65 views
0

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

感谢

:)

回答

0

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

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

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

在数据库级别,通常最终会放弃关系模型的各个方面(因此也就是SQL的强大功能)来存储数据,而不需要“传统”的行列关系。这通常会使查询更加困难,并且可能会牺牲标准遵从性(例如,通过使用供应商特定的扩展)。

如果数据因为技术原因而改变 - 也就是说数据的性质不是要改变的,那只是技术链让你担心 - 我建议你改为使用版本控制的概念,具有不同版本的“强类型”服务/数据。虽然这似乎更多的工作,依靠模式验证,关系数据库模型和简单的好处通常使它成为一个很好的折衷...

+0

这正是我所期待的!谢谢!我将看看这些辩论 – Mage 2012-04-27 19:20:28

0

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

+0

我需要表结构中的数据,以便我可以查询 – Mage 2012-04-27 19:16:36

+0

如果您使用的是支持xml的现代RDMS,则可以查询它! – RQDQ 2012-04-30 02:56:02