我们正在编写代码以使用枚举映射中的所有有效值生成检查约束。我们的一些枚举通过映射集合集合在复合元素内部(见下文):
<set name="Addresses" table="[Addresses$]" access="field.camelcase-underscore">
<key column="Person" />
<composite-element class="Address">
<property name="StreetAddress1" column="[Street Address 1]" />
<property name="Country" type="Import.DataAccess.Mappings.UserTypes.EnumerationDisplayNameType`1[[Core.Domain.Model.Enumerations.Country, Core]], Import" />
<property name="State" type="Import.DataAccess.Mappings.UserTypes.EnumerationDisplayNameType`1[[Core.Domain.Model.Enumerations.State, Core]], Import" />
<property name="ZipCode" column="[Zip Code]" length="10" />
</composite-element>
</set>
当枚举简单地映射为属性或内部组件时,我们可以使用反射成功获取特定枚举的所有有效值。我们通过获取NHibernate.Mapping.Table并迭代查找枚举类型的列来完成此操作。我们的问题是收集类型。对于集合类型,ColumnsIterator计数始终为零。
有没有人成功地从映射集中获取列信息(恰好是代码中的值对象,如果这很重要)?
不确定我们要做的是什么。如果有更多信息需要更好地了解这个问题,请告诉我。
答案 0 :(得分:1)
[最初由OP回答] :原来我们在错误的地方寻找解决方案。最初我们只使用Configuration.ClassMappings和Configuration.CollectionMappings,正如我的原始注释所示,列没有从CollectionMappings中公开。
当我们完成每个ClassMapping的PropertyIterator并根据属性是Collection还是Component来获取枚举信息时,我们发现了成功(以及我们想要的枚举),因为有几种方法可以使用Components来映射事物,这是迄今为止最棘手的部分。我想在博客上详细介绍我们的解决方案。如果发生这种情况,我会尝试发布一个链接。