在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不支持可空的枚举是正确的吗?

在OrmLite中不支持ServiceStack 3的空枚举属性

您在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);
        }
    }