我想在NHibernate中使用Fluent NHibernate映射一个枚举集合,然后对该枚举集合的内容执行查询,但系统每次都会抛出异常。在NHibernate中映射一个枚举集合
我有一个Widget类,映射到Widget表。还有一个WidgetType枚举,并且一个Widget实例可以有许多WidgetTypes,通过WidgetTypes属性映射。该属性需要映射到一个单独的表WidgetTypeRef,它带有两个整数列:WidgetId和WidgetType。
public class Widget
{
/* omitted */
public IList<WidgetType> WidgetTypes { get; set; }
}
public enum WidgetType
{
SomeType = 0,
SomeOtherType = 1,
YetOneMoreType = 2
}
public partial class WidgetMapping : IAutoMappingOverride<Widget>
{
public void Override(AutoMapping<Widget> mapping)
{
/* omitted */
mapping.HasMany(w => w.WidgetTypes)
.Table("WidgetTypeRef")
.KeyColumn("WidgetId")
.Element("WidgetType");
}
}
我无法控制数据库模式;该架构无法更改。模式必须存储与Widget关联的WidgetTypes的整数值,并且不能转换为匹配枚举的字符串版本。我非常努力保持enum的强类型,并且避免为Ref表创建新实体。
其他类具有与“.CustomType(typeof(someTypeEnum)”配置一起工作的基于枚举的类型属性,但HasMany映射中没有CustomType属性使用上面的HasMany映射,对集合的查询抛出“无法确定成员类型”异常
这是甚至可能的?应该如何设置属性?应如何配置Fluent映射?如何查询集合(我的查询只需要与一个Any或Contains)?