2012-11-10 75 views
22

與枚舉不兼容使用數據庫第一設計和具有TINYINT(或SMALLINT)柱:TINYINT(字節),SMALLINT(Int16類型)在EF5

[MyEnumColumn] [tinyint] NOT NULL 

我映射此列枚舉類型在EDM與

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

凡NSpace.MyEnumType這樣定義:

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

只得到嘗試加載實體時,這個錯誤從上下文:

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.

同樣適用,如果我使用[SMALLINT]和[Int16的]但是一旦更改數據庫[INT]和枚舉類型爲[的Int32]錯誤消失。

爲什麼當99.9%時間的枚舉沒有超過256個項目或我缺少別的東西時,我需要將枚舉值存儲在4Byte(Int)數據字段中而不是1Byte(Tinyint)中?

回答

63

那麼,如果有人有興趣的問題是枚舉的默認類型:

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

由於枚舉默認爲鍵入INT,[基礎類型:{字節}]不匹配類型的[外部類型] {MyEnumType:Int}所以要修復它爲我的原始tinyint字段,您需要像這樣定義您的枚舉:

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

這也解決了我今天的錯誤。所以+1 – magicandre1981

+0

這節省了我的一天:) +1 – Midas

+0

好吧,如果有人有興趣,是的,當然,你救了我!多謝兄弟!! – CMS