1

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

我尝试将允许 null int 字段映射到“NullAble”枚举类型属性,但失败了。

在 VS.Net 的可视化设计器中,如果我将“Nullable”属性设置为“true”并将“Type”属性设置为“MyEnum”(“MyEnum”是我定义的枚举)到域类中的属性,则错误下面将在我编译项目时返回。

“MyClass”持续类的名称为“MyEnum”的成员的类型不是其列的有效映射。

如果我将“Nullable”属性设置为“false”并将“Type”属性设置为“MyEnum?” 到领域类中的属性,编译通过,但是运行时从数据库中取数据会返回下面的错误。

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

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

感谢您提前提供任何帮助!

4

1 回答 1

2

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

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

您可以通过以下步骤实现此目的: 1) 将域类属性的类型更改为“int”,将其 Nullable 设置设置为“true”,并将其访问修饰符设置为“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;
    }
}

关于您遇到的映射错误- 它是OpenAccess ORM 验证框架的一部分,旨在警告您模型中可能存在的不一致,这并不意味着您的项目不可构建,它也将在实施可空枚举支持。

于 2013-04-15T08:38:36.913 回答