将表中的数据映射到枚举的XSD或CLR对象

本文关键字:XSD CLR 对象 枚举 映射 数据 | 更新日期: 2023-09-27 17:57:34

我目前正在使用一个标准的4.0 Web Forms应用程序(没有动态数据),我想尝试使我的网站配置尽可能动态。

我有一个数据库表,其中每一行代表一个文件类型。我想做一个过程,在这个过程中,站点配置是动态的,足以处理和吸收基于此表的更改对其配置的更改。

目前,我在web.config文件的configsection中有一个条目集合,该集合表示文件类型的集合。所以,如果我想处理PDF文件,也许我会在文件类型部分使用类似<add key="Pdf">的内容。

这些键中的每一个在我的数据库中都有一个条目,我使用枚举将友好名称/CLR对象映射到数据库值(整数)。我喜欢这样一种方式,即我可以在标记属性(例如<cc1:MyControl FileType="Pdf">)中轻松使用它,并且我可以使用数据库数据和web.config中的其他属性的组合,以允许Intellisense真正发挥作用。

问题是,这个枚举目前是硬编码的,我不知道有什么好方法可以使它动态处理未来的添加或删除。目前,如果我想添加一个新的文件类型,我必须向数据库中添加一个新行,在web.config中为其添加一个条目,然后用新的ID更新枚举。这对我来说没问题,但这有点手动,而且我不能代表我们的支持人员能够遵循该过程。

我认为,在概念上给我造成障碍的原因是,我没有将DB模式转换为CLR模式,而是试图将模式对象实例的聚集转换为一种类型。

我使用的是实体框架,所以利用其中的一些东西并不是问题。

我曾考虑使用xsd.exe,但由于我不热衷于安排它运行或调用它来刷新模式,让其他开发人员经历这个过程可能比手动更新枚举更难。然而,如果有什么我可以做的路线,我非常愿意去看看。

需要澄清的是,我并没有真的对web.config中的内容感到厌倦,这只是我如何做到的,让它以硬编码的方式工作得很好。

理想情况下,我想做的是让源于数据库的数据自动神奇地解析和/或识别,我只需将其名称或纯英文表示形式放在标记属性中。我认为这很可能看起来像客户端引用的某个xml模式文件。

如果你有什么建议,我真的很感激。谢谢大家。

将表中的数据映射到枚举的XSD或CLR对象

我最终离开了web.config。我本可以自己进行转换,但我决定使用T4模板。我将存储在web.config中的数据移动到数据库中的字段中,然后使用T4模板查询数据库,获取所有行并为它们生成枚举值。然后,我创建了隐式运算符来将枚举类型转换为实体,反之亦然,例如get{ return context.Where(myVar => myVar.myKey == (int) myEnumVal);

所以现在我的支持不必破解代码,他们只需在数据库中添加一行,设计时模板就会生成新的值。