.NET中枚举转字符串及EF Core存储枚举字符串至SQL的方法
在EF Core中存储枚举字符串值及.NET枚举与字符串转换方法
EF Core配置枚举存储为字符串
要让EF Core将枚举字段存储为字符串而非数值,通过Fluent API配置是最直接的方式:
在你的DbContext类中重写OnModelCreating方法,为Student的Type字段指定字符串转换:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Student>() .Property(s => s.Type) // 指定转换为字符串类型 .HasConversion<string>() // 可选:指定数据库列的类型和长度,优化存储 .HasColumnType("nvarchar(20)"); }
核心是HasConversion<string>配置,它会让EF Core将枚举值以成员名称的字符串形式持久化到数据库中。如果需要结合数据注解,可搭配[Column(TypeName = "nvarchar(20)")]标注字段,但Fluent API的转换配置是必须的。
.NET中枚举与字符串的转换方法
枚举转字符串
- 直接调用
ToString():最常用的方式,直接返回枚举成员的名称
UserTypeEnum studentType = UserTypeEnum.Master; string typeName = studentType.ToString(); // 输出 "Master"
- 使用
Enum.GetName():通过枚举类型和成员获取名称
string phdTypeName = Enum.GetName(typeof(UserTypeEnum), UserTypeEnum.PhD); // 输出 "PhD"
- 获取所有枚举成员名称:用
Enum.GetNames()返回所有枚举成员的名称数组
string[] allTypeNames = Enum.GetNames(typeof(UserTypeEnum)); // 结果: ["Bachelor", "Master", "PhD"]
字符串转枚举
- 使用
Enum.Parse():将字符串解析为枚举成员,转换失败会抛出异常
string targetType = "Bachelor"; UserTypeEnum parsedType = (UserTypeEnum)Enum.Parse(typeof(UserTypeEnum), targetType);
- 安全转换
Enum.TryParse():避免转换失败抛出异常,返回布尔值标识转换结果
string inputType = "InvalidType"; if (Enum.TryParse<UserTypeEnum>(inputType, out UserTypeEnum result)) { // 转换成功,使用result } else { // 处理转换失败的逻辑 }
内容的提问来源于stack exchange,提问作者moein hajebrahimi
相关产品推荐
相关产品推荐

