Как сопоставить таблицу поиска с enum? - PullRequest
9 голосов
/ 06 сентября 2010

Предположим, у меня есть следующие 2 таблицы SQL:

Foo

Column        DataType
---------------------------
Title         NVARCHAR(20)
Body          NVARCHAR(MAX)
FooTypeId     TINYINT

FooType

Column        DataType
--------------------------
FooTypeId     TINYINT
Name          NVARCHAR(10)

Теперь я использую Entity Framework 4.0 с пользовательским контекстом данных и реализацией POCO.

Как мне сопоставить это с конструктором и моими POCO?

Нужно ли создавать свойство POCO (типа байт, который я предполагаю) называется "FooTypeId", затем я выставляю ДРУГОЕ свойство моего типа перечисления?

Т.е.

public class Foo
{
    public byte FooTypeId { get; set; } // for ORM - do i need this??
    public FooType FooType // for most querying operations
    {
         get
         {
            return (FooType)this.FooTypeId;
         }
         set
         {
            this.FooTypeId = (int)value;
         }
    }
}

public enum FooType
{
    Blah = 1,
    Foo = 2,
    Bar = 3
}

На данный момент у меня даже нет FooType таблица моего дизайнера, как я понял, я могу попытаться "выразить" это как перечисление из фактического FooTypeId в свойстве Foo.Или я должен создать «Навигационное свойство» на картографическом устройстве, а затем определить это в моем POCO?

Я читал темы из нескольких лет назад (EF1), говоря: «Перечисления не поддерживаются в EF»это все еще в EF4?Если да, то, что я делаю правильно?

Я немного растерялся, некоторые рекомендации будут с благодарностью!

1 Ответ

7 голосов
/ 06 сентября 2010

В настоящее время EF4 изначально не поддерживает перечисления.

Я видел отличный обходной путь от AlexJ, который работает довольно хорошо (хотя он довольно тяжелый код), * ​​1003 *http://blogs.msdn.com/b/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4.aspx

Я также слышал, что эта собственная поддержка enum появится в следующей версии EF4, но кто точно знает, когда она будет выпущена.

...