还有一些关于使用ActiveRecord将枚举映射到数据库的其他帖子,但没有一个回答我的问题。我有一个名为OrderState的枚举:
public enum OrderState {InQueue, Ordered, Error, Cancelled}
我在桌子上有以下属性:
[Property(NotNull = true, SqlType = "orderstate", ColumnType = "DB.EnumMapper, WebSite")]
public OrderState State
{
get { return state; }
set { state = value; }
}
我有以下类型类:
public class EnumMapper : NHibernate.Type.EnumStringType<OrderState>
{
public EnumMapper()
{
}
public override NHibernate.SqlTypes.SqlType SqlType
{
get
{
return new NHibernate.SqlTypes.SqlType(DbType.Object);
}
}
}
现在这实际上是按照我想要的方式工作,但问题是我有大量的枚举,我不想为每一个创建一个EnumMapper类。有没有办法告诉ActiveRecord使用DbType.Object进行任何枚举?它似乎想要是一个整数或字符串,但没有别的。这一次让我在过去的两个小时里疯狂了..
麦克
答案 0 :(得分:2)
编写一个覆盖SqlType的通用EnumStringType,然后应用它:
public class EnumMapper<T> : NHibernate.Type.EnumStringType<T>
{
public EnumMapper()
{
}
public override NHibernate.SqlTypes.SqlType SqlType
{
get
{
return new NHibernate.SqlTypes.SqlType(DbType.Object);
}
}
}
申请:
[Property(NotNull = true,
ColumnType = "MyNamespace1.EnumMapper`1[MyNamespace2.OrderState, MyAssembly2], MyNamespace1")]
public OrderState State {get;set;}
答案 1 :(得分:0)
除非我遗漏了什么,否则你可以这样做:
public enum ExampleEnum
{
Value1,
Value2
}
[ActiveRecord]
public class ExampleClass
{
[PrimaryKey]
public int ID { get; set; }
[Property]
public ExampleEnum Example { get; set; }
}
似乎对我有用。
答案 2 :(得分:-1)
ColumnType = typeof(EnumStringType<OrderState>).AssemblyQualifiedName