Tinyint (bajt), SmallInt (Int16) niezgodny z Enum w EF5
Korzystanie z pierwszego projektu bazy danych i kolumny tinyint (lub smallint):
[MyEnumColumn] [tinyint] NOT NULL
Mapowałem tę kolumnę na Enum Type w EDM za pomocą
External Type: NSpace.MyEnumType
Name:MyEnumType
UnderlyingType:Byte
Gdzie NSpace.MyEnumType jest zdefiniowany tak:
public enum MyEnumType
{ One, Two, Three, All }
Tylko po to, aby uzyskać ten błąd podczas próby załadowania elementu z kontekstu:
Określony schemat jest nieprawidłowy. Błędy:
Nie znaleziono odpowiedniego typu warstwy obiektu dla typu koncepcyjnego „EntityDataModel.MyEnumType”.
Poniższe informacje mogą być przydatne w rozwiązaniu poprzedniego błędu:
Podstawowy typ typu wyliczania CLR nie jest zgodny z typem bazowym typu wyliczania EDM.
To samo dotyczy sytuacji, gdy używam [Smallint] i [Int16], ale gdy zmienię bazę danych na [Int] i typ wyliczeniowy na [Int32], błąd zniknie.
Dlaczego muszę przechowywać wartość wyliczoną w polu danych 4Byte (Int) zamiast 1Byte (Tinyint), gdy wyliczenia w czasie 99,9% nie mają więcej niż 256 elementów lub czy brakuje mi czegoś innego?