映射新列并对其进行过滤

时间:2014-05-05 15:08:13

标签: c# sql nhibernate hibernate-mapping linq-expressions

我在尝试实现过滤器控件以过滤使用nhibernate检索后显示的结果时遇到了问题。 假设我有一个名为“Facility”的实体,并且该工具可以由用户自定义,并且可以将其他列添加到其结构中(例如,number_of_floors)。发生此自定义时,将更改数据库中的表结构(添加适当类型的新列)但显然该域或域映射文件中不存在该列。相反,它存储在这样的表中:

<hibernate-mapping assembly="Databases" namespace="Domains" xmlns="urn:nhibernate-mapping-2.2">
  <class name="CsCustomColumn" table="CS_CUSTOM_COLUMN" lazy="true">
    <id name="Id">
      <column name="id" sql-type="varchar(32)" />
    </id>
    <property name="ColumnName">
      <column name="column_name" not-null="true" />
    </property>
    <property name="ColumnTitle">
      <column name="column_title" not-null="true" />
    </property>
    <property name="ColumnWidth">
      <column name="column_width" />
    </property>
    <property name="ColumnPrecision">
      <column name="column_precision" />
    </property>
    <property name="DefaultValue">
      <column name="default_value" />
    </property>
    <property name="MinValue">
      <column name="min_value" />
    </property>
    <property name="MaxValue">
      <column name="max_value" />
    </property>
    <many-to-one insert="true" update="true" lazy="false" name="CsRefTable">
      <column name="cs_ref_table_id" not-null="true" sql-type="varchar(32)" />
    </many-to-one>
    <many-to-one insert="true" update="true" lazy="false" name="CsRefDataType">
      <column name="cs_ref_data_type_id" not-null="true" sql-type="varchar(32)" />
    </many-to-one>
  </class>
</hibernate-mapping>

然后通过FK将此表链接到CS_REF_TABLE(上例中的cs_ref_table_id),它基本上按名称和GUID列出了表。自定义列表和设施表之间没有直接链接。通过执行查找(从CsCustomColumn中选择*,其中table_name ='Facility')

在过滤用户可用的标准列(名称,国家/地区等)时,我的过滤器工作正常,因为这些列存在于域和域中。映射。我基本上使用域类构建表达式树来获取属性和数据类型的列表。

我的问题是,如何在这些自定义列上过滤结果。示例:获取number_of_floors = 5;

的设施列表

0 个答案:

没有答案