2012-11-10 4 views
22

Korzystanie Database pierwszy projekt i posiadające tinyint (lub smallint) kolumna:Tinyint (bajt), Smallint (Int16) nie jest kompatybilny z Enum w EF5

[MyEnumColumn] [tinyint] NOT NULL 

I odwzorowane tę kolumnę typu Enum w EDM z

External Type: NSpace.MyEnumType 
Name:MyEnumType 
UnderlyingType:Byte 

Gdzie NSpace.MyEnumType jest zdefiniowany następująco:

public enum MyEnumType 
{ One, Two, Three, All } 

tylko dostać ten błąd, gdy próbuje załadować podmiot od kontekstu:

Schema specified is not valid. Errors:

No corresponding object layer type could be found for the conceptual type 'EntityDataModel.MyEnumType'.

The following information may be useful in resolving the previous error:

The underlying type of CLR enumeration type does not match the underlying type of EDM enumeration type.

To samo dotyczy, jeśli mogę użyć [Smallint] i [Int16] ale po zmianie bazy danych [Int] oraz typu wyliczeniowego do [Int32] błąd zniknął.

Dlaczego muszę przechowywać wartość wyliczenia w polu danych 4Byte (Int) zamiast 1Byte (Tinyint), gdy wyliczenia w 99,9% czasu nie mają więcej niż 256 elementów lub czy brakuje mi czegoś innego?

Odpowiedz

63

Dobrze, jeśli ktoś jest zainteresowany problemem jest w domyślnym typu ENUM w:

public enum MyEnumType 
{ One, Two, Three, All } 

Ponieważ domyślne enum wpisać int, [Bazowy Rodzaj: {Byte}] nie pasuje rodzaj [ Typ zewnętrzny] {MyEnumType: Int} tak, aby naprawić go dla mojego oryginalnego pola tINYINT trzeba zdefiniować enum tak:

public enum MyEnumType : byte 
{ One, Two, Three, All } 
+0

ten rozwiązano również błąd, że miałem dzisiaj. Więc +1 – magicandre1981

+0

To uratowało mój dzień :) +1 – Midas

+0

Dobrze, jeśli ktoś jest zainteresowany, tak na pewno mnie uratujesz !! dzięki stary!! – CMS

Powiązane problemy