应对滞后枚举支持

时间:2012-02-07 22:40:22

标签: .net entity-framework enums wcf-data-services

实体框架在EF 5.0(计划很快发货)之前不会支持枚举。

Entity Framework 4.2 enum support

http://blogs.msdn.com/b/efdesign/archive/2011/06/29/enumeration-support-in-entity-framework.aspx

http://visualstudiomagazine.com/blogs/data-driver/2012/01/entity-framework-4-3-gets-final-tune-up.aspx

WCF数据服务(和oData标准)不支持枚举

  

我们知道枚举是常见的,不幸的是他们从未见过   酒吧到目前为止。他们对我们下一步要做的事情很重要   虽然

(参见:https://stackoverflow.com/a/3571378/141172

我已经开始了一个新项目,正在用以下内容替换enum:

public static class MyEnum
{
    public const int MyValue = 0;
    public const int AnotherValue = 1;
}

我正在牺牲enum提供的保证,即只分配定义的值以便利用重要的(此时相当成熟的)基础设施服务。

有没有更好的方法来处理滞后的枚举支持?一旦EF和WCF数据服务添加枚举支持,是否有可能会出现另一个重要的框架,它将像这两个一样慢地引入枚举支持?

2 个答案:

答案 0 :(得分:0)

比你的例子更好的是使用枚举来保存常量值并且每次都转换为int。这样你至少可以使用enum,而不是放弃一切。

枚举永远不会提供不可避免的类型安全。但是,通过尽可能地将枚举的使用扩展到应用程序代码和业务逻辑中,您可以越来越安全地防止细微的使用错误。

答案 1 :(得分:0)

您是否可以使用具有私有构造函数的结构,该构造函数为每个值定义公共静态成员:

public struct FakeEnum
    {
        public static readonly FakeEnum MyValue = new FakeEnum(0);
        public static readonly FakeEnum AnotherValue = new FakeEnum(1);

        private readonly int _value;

        private FakeEnum(int value)
        {
            _value = value;
        }

        public int Value { get { return _value; } }

        // TODO: Equals and GetHasCode and Operators Oh My!
    }

注意:我实际上没有试过这个。