我有一个映射,我不太确定该怎么做。我有一个表,它有一个Numeric(9,0)列,可能的值为0-3。我想在我的实体中将其表示为枚举,但是没有将Numeric(9,0)直接映射到整数。它是数字的原因是为了支持跨数据库(MSSQL和Oracle)。
Numeric(9,0)直接映射到不能为枚举的C#小数。这不是枚举允许的类型之一。
在这里,我需要将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; }
}发布于 2011-04-28 04:20:49
尝试使用CustomType和CustomSqlType说明符:
public class UserHeaderMap:ClassMap<UserHeader>
{
public UserHeaderMap()
{
...
Map(x=>x.LoginType).CustomType(typeof(LoginType)).CustomSqlType("Numeric(9,0)");
}
}指定枚举的自定义类型告诉FNH持久化数值,而不是其默认行为,即持久化ToString()值(和/或期望它出现在表中)。CustomSqlType更多的是用于模式生成,覆盖模式列的默认int类型。
如果这不起作用,可以尝试添加一个公式()而不是CustomSqlType,以强制转换或将数值转换为整数,后者将被NH拾取并强制转换为枚举值。
https://stackoverflow.com/questions/5809985
复制相似问题