25

Database first design を使用し、tinyint (または smallint) 列を持つ:

[MyEnumColumn] [tinyint] NOT NULL

この列をEDMの列挙型にマッピングしました

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

NSpace.MyEnumType は次のように定義されています。

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

コンテキストからエンティティを読み込もうとしたときにのみ、このエラーが発生します。

指定されたスキーマは無効です。エラー:

概念型 'EntityDataModel.MyEnumType' に対応するオブジェクト レイヤーの型が見つかりませんでした。

次の情報は、前のエラーを解決するのに役立つ場合があります。

CLR 列挙型の基になる型が、EDM 列挙型の基になる型と一致しません。

[Smallint] と [Int16] を使用する場合も同じですが、データベースを [Int] に変更し、列挙型を [Int32] に変更すると、エラーはなくなります。

99.9% の時間で列挙型に 256 個を超えるアイテムがない場合、または他に何か不足している場合に、列挙型の値を 1 バイト (Tinyint) ではなく 4 バイト (Int) データ フィールドに格納する必要があるのはなぜですか?

4

2 に答える 2

70

誰かが興味を持っているなら、問題は列挙型のデフォルトタイプにあります:

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

enum はデフォルトでint型になるため、 [Underlying Type:{ Byte }] は [External Type] {MyEnumType:Int} の型と一致しないため、元の tinyint フィールドを修正するには、次のように enum を定義する必要があります。

public enum MyEnumType : byte
{ One, Two, Three, All }
于 2012-11-10T09:12:50.970 に答える