我目前正在使用标准4.0 Web窗体应用程序(没有动态数据),我想尝试使我的网站配置尽可能动态。
我有一个数据库表,其中每一行代表一个文件类型。我想创建一个流程,其中站点配置足够动态,可以根据对此表的更改来处理和吸收对其配置的更改。
目前,我的web.config文件中的配置部分中有一组条目,表示文件类型的集合。所以,如果我想处理PDF文件,也许我会在文件类型部分中使用<add key="Pdf">
。
这些键中的每一个在我的数据库中都有一个条目,我使用枚举将友好名称/ CLR对象映射到数据库值(整数)。我喜欢我可以在标签属性中轻松使用它的方式,例如<cc1:MyControl FileType="Pdf">
,我可以使用来自web.config的数据库数据和其他属性的组合,以允许Intellisense真正做到这一点。
问题是,这个枚举目前是硬编码的,我不知道如何使这个动态处理未来的添加或删除。按照目前的情况,如果我想添加一个新的文件类型,我必须在数据库中添加一个新行,在web.config中为它添加一个条目,然后使用新的ID更新枚举。这对我来说没问题,但它有点手册,而且我不能说我们的支持能够遵循这个程序。
我认为在概念上对我造成障碍的是,不是将DB模式转换为CLR模式,而是实际上尝试将模式对象的实例集合转换为一种类型。
我正在使用实体框架,所以在那里利用一些东西没有问题。
我正在考虑使用xsd.exe,但由于我并不热衷于安排它运行或调用它来刷新架构,让其他开发人员完成这个过程可能比仅手动更新枚举更加笨拙。然而,如果有什么我可以做那条路线,我非常愿意检查出来。
为了澄清一点,我并没有真正想到在web.config中使用它,这就是我如何使它以硬编码的方式工作得很漂亮和漂亮。
理想情况下,我想做的是拥有源自数据库的数据自动神奇地解析和/或识别,我可以在标记属性中将其名称或表示放在简单的英语中。我认为这很可能看起来像客户端引用的一些xml架构文件。
如果您有任何建议,我真的很感激。谢谢你们。
答案 0 :(得分:0)
我最终离开了web.config。我本可以进行自己的转换,但我决定使用T4模板。我将存储在web.config中的数据移动到数据库中的字段中,然后我使用T4模板查询数据库并获取所有行并为它们生成枚举值。然后我创建了隐式运算符以将枚举类型转换为实体,反之亦然,例如get{ return context.Where(myVar => myVar.myKey == (int) myEnumVal);
所以现在我的支持不必破解代码,他们只是在数据库中添加一行,设计时模板将生成新的值。