Telerik OpenAccess:可以映射“NullAble”枚举类型属性吗?

时间:2013-04-15 07:36:12

标签: enums nullable openaccess

我是OpenAccess的初学者。我正在根据我的经验编写一些测试代码" Linq to Sql"

我尝试将allow null int字段映射到" NullAble"枚举类型属性,但失败。

在VS.Net的可视化设计器中,如果我设置" Nullable"财产到"真"和"键入"属性为" MyEnum"(" MyEnum"是我定义的枚举)到域类中的属性,编译项目时将返回以下错误。

名称为" MyEnum"的会员类型" MyClass" presistent类不是其列的有效映射。

如果我设置" Nullable"财产到"假"和"键入"属于" MyEnum?"对于域类中的属性,编译传递,但在运行时从数据库获取数据时将返回以下错误。

类型转换器初始化失败。转换器名称为' IntConverter'不转换CLR类型' System.Nullable`1 [[Model.MyEnum,Model,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'到SQL类型' int'。

但是" Linq to Sql"," NullAble"枚举类型属性可以映射到一个类并且工作正常。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

不幸的是,似乎Nullable Enums目前不受支持,但此问题已经解决,您可以在Telerik OpenAccess ORM的未来版本中找到它。

作为一种解决方法,您可以在Domain Class的部分类中创建一个包装器属性,以便正确获取和设置Enum。

您可以按照以下步骤实现此目的: 1)将Domain Class Property的类型更改为“int”,将其Nullable设置为“true”,将其Access Modifier设置为“private”。 2)创建包含Nullable枚举的实体的部分类。 3)添加一个包装器属性并实现其getter和setter,如下所示:

public MyEnum? MyEnumWrapper
{
    get
    {
        if (this.MyEnum.HasValue)
        {
            return (MyEnum)this.MyEnum.Value;
        }

        return null;
    }
    set
    {
        this.MyEnum = (int?)value;
    }
}

关于您获得的mapping error - 它是OpenAccess ORM validation framework的一部分,旨在警告您模型中可能存在的不一致性,并不意味着您的项目不可构建且它也将被修复,实现可以为空的枚举支持。