NHibernate-任何类型映射;如何查询元值?”;或;meta type=”如何定义;“类”;工作;

NHibernate-任何类型映射;如何查询元值?”;或;meta type=”如何定义;“类”;工作;,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我使用NHibernate 3.3.3,并且有一个使用NHibernet文档5.2.4中描述的“任何类型映射”的类映射 目前看起来是这样的: <class name="AttributeValue" table="AttributValue"> <id name="Id" column="ID" type="int" > <generator class="MyGenerator" /> </id> <property

我使用NHibernate 3.3.3,并且有一个使用NHibernet文档5.2.4中描述的“任何类型映射”的类映射

目前看起来是这样的:

<class name="AttributeValue" table="AttributValue">
  <id name="Id" column="ID" type="int" >
    <generator class="MyGenerator" />
  </id>
  <property   name="Value"    column="Value"      type="string" length="255"/>
  <many-to-one name="AttributeDef" column="AttributDef_ID" />

  <any name="Reference" id-type="Int32" meta-type="Int32">
    <meta-value value="1" class="MxObject"/>
    <meta-value value="500" class="Material"/>
    <meta-value value="5" class="Company"/>
    <meta-value value="10" class="Fluid"/>
    <meta-value value="10040" class="Contract"/>
    <meta-value value="504" class="Tool"/>

    <column name="Kontext"/>
    <column name="Oid"/>
  </any>
</class>
public class AttributeValue
{
    public AttributeValue() { }
    public virtual int Id { get; set; }
    public virtual string Value { get; set; }
    public virtual AttributeDef AttributeDef { get; set; }
    public virtual object Reference { get; set; }     
} 
<bag name="AttributeValueList">
  <key column="OID"/>
  <one-to-many class="AttributeValue"/>
</bag>
映射中引用的其他实体有一个指向AttributeValue实体的集合,如下所示:

public virtual ICollection<AttributeValue> AttributeValueList { get; set; }
我只是不知道如何查询元数据或映射,以找出哪些实体可以放入引用属性中

我试图通过这种方式获得元值:

    var metadata = session.SessionFactory.GetClassMetadata(typeof(AttributeValue));
    var pType = metadata.GetPropertyType("Reference") as AnyType;
    var mType = (pType.Subtypes[0]) as MetaType;
但是元类型类没有公开包含这些特定信息的字典,我也没有找到从中获取可能类列表的方法

我也通过网络试过了

cfg.GetClassMapping(typeof(AttributeValue)) 
但最终我只得到了一个元类型类的实例

有没有办法查询这些特定信息

如果不是,也许还有别的办法

我在NHibernate文档中发现了这个示例:

<any name="AnyEntity" id-type="Int64" meta-type="Eg.Custom.Class2TablenameType">
    <column name="table_name"/>
    <column name="id"/>
</any>

如果我看到了这一点,那么我可以创建一个类来保存这些信息,并将其作为元类型属性传递。然后我就可以查询这个类来获得我想要的信息

我只是不知道如何实现这个Class2TablenameType类,文档也不太清楚(至少我不太理解)如何实现它

我们将不胜感激

<any name="AnyEntity" id-type="Int64" meta-type="Eg.Custom.Class2TablenameType">
    <column name="table_name"/>
    <column name="id"/>
</any>