OrmLite for ServiceStack 3不支持Nullable枚举属性?

时间:2014-06-13 11:50:06

标签: c# servicestack ormlite-servicestack servicestack-bsd

我正在使用ServiceStack 3和OrmLite。 我的一个数据类有一个可以为空的枚举属性,如下所示:

[Alias("CALL_SESSION")]
public class CallSession
{
    ...
    [Alias("RESULT")]
    public CallSessionResultEnum? Result { get; set; }
    ...
} 

在我的Oracle数据库中,字段RESULTNULLABLE NUMBER

当我尝试像这样检索CallSession时:

cn.Where<CallSession>(x => ....)

我收到例外specified cast is not valid。 如果我将班级中的字段类型切换为简单的int?,它可以正常工作。我是否认为OrmLite不支持可以为空的枚举?

1 个答案:

答案 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);
        }
    }