我正在使用ServiceStack 3和OrmLite。 我的一个数据类有一个可以为空的枚举属性,如下所示:
[Alias("CALL_SESSION")]
public class CallSession
{
...
[Alias("RESULT")]
public CallSessionResultEnum? Result { get; set; }
...
}
在我的Oracle数据库中,字段RESULT
是NULLABLE NUMBER
。
当我尝试像这样检索CallSession
时:
cn.Where<CallSession>(x => ....)
我收到例外specified cast is not valid
。
如果我将班级中的字段类型切换为简单的int?
,它可以正常工作。我是否认为OrmLite不支持可以为空的枚举?
答案 0 :(得分:1)
您的OracleOrmLiteDialectProvider中的方法ConvertDbValue的覆盖不正确:
public override object ConvertDbValue(object value, Type type)
{
if (type.IsEnum)
{
var val = Convert.ToInt32(value);
if (!Enum.IsDefined(type, val))
throw ExHelper.Argument(Errors.Common_EnumValueNotFound, val, type.FullName);
return val;
}
}
解决方案:
public override object ConvertDbValue(object value, Type type)
{
if (type.IsEnum)
{
var val = Convert.ToInt32(value);
if (!Enum.IsDefined(type, val))
throw ExHelper.Argument(Errors.Common_EnumValueNotFound, val, type.FullName);
return base.ConvertDbValue(value, type);
}
}