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

问题描述

| 我当前正在使用标准的4.0 Web窗体应用程序(无动态数据),并且我想尝试使网站配置尽可能地动态。 我有一个数据库表,其中每一行代表一个文件类型。我想进行一个过程,其中站点配置具有足够的动态性,可以根据此表的更改来处理和吸收对其配置的更改。 目前,我的web.config文件中的configsection中有一个条目集合,它代表文件类型的集合。因此,如果我要使用PDF文件,也​​许在文件类型部分中会有类似“ 0”的内容。 这些键中的每一个在我的数据库中都有一个条目,并且我正在使用一个枚举将友好名称/ CLR对象映射到数据库值(整数)。我喜欢我可以轻松地在标签属性中使用它的方式,例如1,并且我可以结合使用数据库数据和来自web.config的其他属性,以使Intellisense真正发挥作用。 问题是,该枚举当前是硬编码的,我不知道使这种动态处理将来的添加删除的好方法。就目前而言,如果要添加文件类型,则必须向数据库添加新行,在web.config中为其添加一个条目,然后使用新ID更新枚举。这对我来说没关系,但这有点手册,而且我不能说我们的支持人员可以遵循该程序。 我认为,从概念上讲,对我造成障碍的是,我实际上不是在将数据库架构转换为CLR架构,而是在尝试将架构对象实例的集合转换为一种类型。 我正在使用实体框架,因此利用其中的某些东西没有问题。 我当时正在考虑使用xsd.exe,但是由于我不希望安排它运行或调用它来刷新架构,因此让其他开发人员执行该过程可能比仅仅手动更新枚举更为麻烦。但是,如果有什么我可以做的话,我非常愿意检查出来。 需要澄清的是,我并没有真正想在web.config中拥有它,这只是我如何使它以硬编码方式正常工作的好方法。 理想情况下,我想做的是对来自数据库的数据进行自动的语法分析和/或识别,在这里我可以将其名称或表示形式以简单的英语放在tag属性中。我认为这很可能看起来像客户端引用的一些xml模式文件。 如果您有任何建议,我将不胜感激。谢谢你们。     

解决方法

我最终离开了web.config。我本可以进行自己的转换,但是我决定改用T4模板。我将存储在web.config中的数据移到数据库的字段中,然后使用T4模板查询数据库并获取所有行并为其生成枚举值。然后,我创建了隐式运算符以将枚举类型转换为实体,反之亦然,例如
get{ return context.Where(myVar => myVar.myKey == (int) myEnumVal);
因此,现在我的支持人员不必破解代码,只需在数据库中添加一行,设计时模板就会生成新值。