将int枚举映射到数字(9,0)或数字(9,0)

时间:2011-04-27 20:14:38

标签: nhibernate fluent-nhibernate

我有一个映射,我不太确定该怎么做。我有一个具有数字(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; }
}

1 个答案:

答案 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拾取并转换为枚举值。