我正在尝试构建一个WCF服务,该服务通过XML从另一个服务获取信息。 XML通常有4个元素,从int,string到DateTime。我想动态构建服务,以便在获取XML时将其存储在数据库中。我不想硬编码代码中的类型和元素名称。如果有变化,我希望它动态地将其添加到数据库中这样做的最佳方法是什么?这是一个好习惯吗?或者我应该坚持使用Entity Framework并为数据库设置模型并对元素名称和类型进行硬编码?
由于
:)
答案 0 :(得分:0)
如果您收到的数据的性质是它没有固定的架构,或者作为其业务逻辑/域逻辑的一部分频繁更改的架构,那么设计一个管理它的解决方案是个好主意。存储您在设计时不知道的模式的数据是StackOverflow的长期争论 - 寻找“属性包”,“实体属性值”或EAV来查看各种问题和答案。
你放弃这种方法的事情是 - 在网络服务层 - 能够检查你收到的数据是否符合商定的接口合同;这反过来有助于避免各种令人兴奋的错误 - 如果收到无效的XML,您的系统应该怎么做?如果没有商定的schema / dtd,您必须在代码中构建各种其他检查。
在数据库级别,您通常最终放弃关系模型的各个方面(因此SQL的强大功能)来存储您的数据,而没有“传统的”行列关系。这通常会使查询更加困难,并且可能会牺牲标准合规性(例如,通过使用特定于供应商的扩展)。
如果数据由于技术原因而发生变化 - 即不是要改变数据的性质,那只是技术链让你担心这一点 - 我建议你建立版本化的概念,并且具有不同版本的“强类型”服务/数据。虽然这似乎更有效,但依赖模式验证,关系数据库模型和简单性的好处通常会使它成为一个很好的权衡...
答案 1 :(得分:0)
将xml作为xml放入数据库。许多现代数据库直接支持XML。如果没有,只需将其存储为文本。