我有一个映射,我不太确定该怎么做。我有一个具有数字(9,0)列的表,可能的值为0-3。我想将此表示为我的实体中的枚举,但没有将数字(9,0)直接映射到整数。它的数字原因是跨数据库支持(MSSQL和Oracle)。
数字(9,0)直接映射到C#decimal,它不能是枚举。这不是枚举允许的类型之一。
我是否需要将IUserType与ITypeConvention结合使用,还是有另一种方式?还给出了以下映射(LoginType是有问题的类型),我将如何实现此IUserType?
public enum LoginType : int
{
UNKNOWN = 0,
COMPANY_LOGIN = 1,
WINDOWS_LOGIN = 2,
LDAP_LOGIN = 3
}
public class UserHeader
{
public virtual Guid UserId { get; set; }
public virtual LoginType LoginType { get; set; }
}
答案 0 :(得分:1)
尝试使用CustomType和CustomSqlType说明符:
public class UserHeaderMap:ClassMap<UserHeader>
{
public UserHeaderMap()
{
...
Map(x=>x.LoginType).CustomType(typeof(LoginType)).CustomSqlType("Numeric(9,0)");
}
}
指定枚举的自定义类型会告诉FNH保留数值,而不是保持ToString()值(和/或在表中预期)的默认行为。 CustomSqlType更多用于模式生成,覆盖模式列的默认int类型。
如果这不起作用,请尝试添加一个Formula()而不是CustomSqlType,以将数字转换或转换为int,这将由NH拾取并转换为枚举值。