gpt4 book ai didi

entity-framework - Entity Framework 5 和字符枚举

转载 作者:行者123 更新时间:2023-12-01 10:04:20 25 4
gpt4 key购买 nike

Entity Framework 5 可以处理字符枚举吗?我让它使用一个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'
}

最佳答案

您的枚举类型不是 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 类型)。

在您的情况下 - 如果您真的想使用 enum 类型,则数据库中的列应该是 int 类型。添加实体时,您应该会在列中看到 70 和 77 的值。

关于entity-framework - Entity Framework 5 和字符枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12257104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com