您的枚举类型不是 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 类型系统没有无符号类型)。对于枚举属性,数据库中的相应列必须与属性的枚举类型的基础类型匹配(即,如果您的枚举属性的基础类型是 Edm.Int32,那么该列应该是 int 类型)。
在您的情况下-如果您真的想使用枚举类型,则数据库中的列应该是 int 类型。添加实体时,您应该会在列中看到值 70 和 77。