在OrmLite中不支持ServiceStack 3的空枚举属性
本文关键字:枚举 属性 ServiceStack OrmLite 不支持 | 更新日期: 2023-09-27 18:08:33
我使用的是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不支持可空的枚举是正确的吗?
您在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);
}
}