我有一个表,它的一些列在编译时是未知的。这样的列可以是整数值,也可以是某个 Enum 值。有一个表保存了这些动态列的所有名称,还保存了列的类型。此“元表”具有以下列:
- 动态列 ID (Pk)
- 姓名
- TypeId(整数/枚举,作为来自单独表的 Fk)
整数列具有该表的Name,而 Enum 列是具有该Name的表中的 Fk 列,并进行了一些修改(例如,“DynamicTable”前缀)。
对于这种情况,我能想到的唯一解决方案是使用 Reflection.Emit 动态创建实体类和相应的映射类。诚然,我是 Nhybernate / Fluent Nhybernate 的新手,表之间的层次结构似乎相对简单,所以我想验证我的解决方案并不像最初看起来那样难看......
我也欢迎完全无视我的表层次结构的解决方案,以便有效地获得相同的结果(即,枚举动态表上的行,遍历所有列,了解它们是否为枚举,如果它们是,它们的可能值也是)。
(编辑:关于问题域的附加信息)我最初包含了最少的细节,以避免与 Too-Much-Info 相关的混淆。这种描述要复杂得多,但它揭示了这种设计背后的动机。
所涉及的应用程序旨在自动化日志/转储分析。分析场景经常由日志/转储专家提供,因此,为了简化需求=>实施=>验证周期的典型流程,此类分析场景由专家直接实现为 Iron Python 代码片段,具有一些特定领域的结构注入到片段的范围内。每个片段都有一个与之相关的“上下文”。“上下文”的示例可以是“产品”、“版本”等......因此,片段本身仅在某些上下文中调用 - 这有助于通过消除分支来简化 Python 代码(您可以将其视为面向方面的编程, 在某种程度上)。非专家可以使用具有给定代码上下文数据库的应用程序,在为各种上下文选择值之后分析日志/转储。当专家决定对某个代码片段进行编目需要新的上下文时,他可以添加一个上下文,指示它可能具有的值。将新上下文添加到数据库后,运行分析的非专家将可以选择为新添加的上下文选择值。“动态表”是将代码片段与发出片段时存在的各种上下文(列)的值以及当时不存在的列的默认值相关联的表。将新上下文添加到数据库后,运行分析的非专家将可以选择为新添加的上下文选择值。“动态表”是将代码片段与发出片段时存在的各种上下文(列)的值以及当时不存在的列的默认值相关联的表。将新上下文添加到数据库后,运行分析的非专家将可以选择为新添加的上下文选择值。“动态表”是将代码片段与发出片段时存在的各种上下文(列)的值以及当时不存在的列的默认值相关联的表。