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