NHibernate-任何类型映射;如何查询元值?”;或;meta type=”如何定义;“类”;工作;
我使用NHibernate 3.3.3,并且有一个使用NHibernet文档5.2.4中描述的“任何类型映射”的类映射 目前看起来是这样的: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
<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>