4

エンティティ フレームワーク 5 は char 列挙型を処理できますか? int で動作していますが、char では、データベースの列が char(1) である場所の下にエラーが表示されます。

The 'Gender' property on 'Division' could not be set to a 'String' value. You must set this property to a non-null value of type 'Gender'.

public enum Gender
{
    Male = 'M',
    Female = 'F'
}
4

2 に答える 2

8

enum型はchar型ではなく、int型です。次の行はそれを示します:

Console.WriteLine(typeof(Gender).GetEnumUnderlyingType());

System.Int32
Press any key to continue . . .

列挙型メンバーの値は、実際にはそれぞれ77と70です。

Console.WriteLine((int)Gender.Male);
Console.WriteLine((int)Gender.Female);

77
70
Press any key to continue . . .

C#/ VB.NETの列挙型の有効な基になる型は、byte、sbyte、short、ushort、int、uint、long、およびulongのみです。このリストにない基になるタイプを次のように配置しようとすると、次のようになります。

public enum Gender : char
{ 
    Male = 'M', 
    Female = 'F' 
}

次のコンパイルエラーが表示されます。

error CS1008: Type byte, sbyte, short, ushort, int, uint, long, or ulong expected

これは、C#の列挙型の背後にある理論です。現在、EF部分-EFは現在、列挙型の基になるタイプのみをサポートしています:Edm.Byte、Edm.SByte、Edm.Int16、Edm.Int32、およびEdm.Int64(Edmタイプシステムには符号なしタイプはありません)。enumsプロパティの場合、データベース内の対応する列は、プロパティのenumタイプの基になるタイプと一致する必要があります(つまり、enumプロパティの基になるタイプがEdm.Int32の場合、列はintタイプである必要があります)。

あなたの場合-本当に列挙型を使いたいのであれば、データベースの列はint型でなければなりません。エンティティを追加すると、列に70と77の値が表示されることを期待する必要があります。

于 2012-09-11T18:10:09.720 に答える