Справиться с поддержкой Lagging Enum - PullRequest
3 голосов
/ 08 февраля 2012

Entity Framework не будет поддерживать перечисления до EF 5.0 (запланировано к отправке в ближайшее время).

Поддержка перечисления Entity Framework 4.2

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 предоставляет, что только определенные значения будут назначаться для использования важных (и на данный момент достаточно зрелых) инфраструктурных услуг.

Есть ли лучший способобрабатывать запаздывающую поддержку enum? Как только EF и WCF Data Services добавят поддержку enum, может ли появиться еще одна важная структура, которая будет внедрять поддержку enum так же медленно, как эти два?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

Не могли бы вы использовать структуру с закрытым конструктором, который определяет открытый статический член для каждого значения:

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!
    }

Примечание: я на самом деле не пробовал это.

0 голосов
/ 08 февраля 2012

Хорошо бы лучше, чем в вашем примере, было бы использование enum для хранения постоянных значений и приведение к int каждый раз. Таким образом, вы можете по крайней мере использовать enum везде, где это возможно, вместо того, чтобы потерять все.

перечисления никогда не обеспечивают неизбежную безопасность типов. Но, расширив использование перечислений настолько, насколько это возможно, в коде приложений и бизнес-логике, вы получаете все большую безопасность от скрытых ошибок использования.

...