EF Core MySql 不显示枚举值
EF Core MySql does not show enum values
在我的项目中,我使用 asp.net core 2.2 和 mysql 作为数据库。在我 selected 枚举值之前(在使用 postgre 之前)它为我显示了准确的值,但现在它显示的是整数而不是值。
我的启动连接:
services.AddDbContext<AppDbContext>(x =>
x.UseMySql(Configuration.GetConnectionString("LibvirtConnection"))
.ConfigureWarnings(warnings => warnings.Ignore(CoreEventId.IncludeIgnoredWarning)));
我的 select 语句:
[HttpGet]
public IActionResult GetVMs()
{
var model =
from vm in _context.VirtualMachines
join project in _context.Projects on vm.ProjectId equals project.Id
join hypervisor in _context.Hypervisors on vm.HypervisorId equals
hypervisor.HypervisorId
join managment in _context.Managements on vm.ManagementId equals managment.Id
select new
{
Id = vm.Id,
Name = vm.Name,
IpAddress = vm.IpAddress,
DiskSize = vm.DiskSize,
Cpu = vm.CPU,
Ram = vm.Ram,
ImageUrl = vm.ImageUrl,
Role = vm.Role.ToString(),
Status = vm.Status.ToString(),
Project = project.Name,
Hypervisor = hypervisor.Name,
Gateway = managment.Gateway,
Netmask = managment.Netmask
};
return Ok(model);
}
我得到了结果:
{
"id": 1,
"name": "kubernetesvm",
"ipAddress": "185.22.98.7",
"diskSize": 500,
"cpu": 24,
"ram": 500,
"imageUrl": "https://www.google.com",
"role": "1",
"status": "0",
"project": "avengers",
"hypervisor": "kubernetes",
"gateway": "vh10",
"netmask": 24
}
应该是角色和状态的实际值。
问题是 Enum 上的 ToString()
使用默认格式说明符 "D"
,它打印 Enum 值后面的数字,但是当手动指定格式时 "G"
ToString("G")
方法 returns 源代码中的名称,这样应该可以解决您的问题,将 .ToString()
替换为 .ToString("G")
所以:
Role = vm.Role.ToString("G"),
Status = vm.Status.ToString("G")
在我的项目中,我使用 asp.net core 2.2 和 mysql 作为数据库。在我 selected 枚举值之前(在使用 postgre 之前)它为我显示了准确的值,但现在它显示的是整数而不是值。
我的启动连接:
services.AddDbContext<AppDbContext>(x =>
x.UseMySql(Configuration.GetConnectionString("LibvirtConnection"))
.ConfigureWarnings(warnings => warnings.Ignore(CoreEventId.IncludeIgnoredWarning)));
我的 select 语句:
[HttpGet]
public IActionResult GetVMs()
{
var model =
from vm in _context.VirtualMachines
join project in _context.Projects on vm.ProjectId equals project.Id
join hypervisor in _context.Hypervisors on vm.HypervisorId equals
hypervisor.HypervisorId
join managment in _context.Managements on vm.ManagementId equals managment.Id
select new
{
Id = vm.Id,
Name = vm.Name,
IpAddress = vm.IpAddress,
DiskSize = vm.DiskSize,
Cpu = vm.CPU,
Ram = vm.Ram,
ImageUrl = vm.ImageUrl,
Role = vm.Role.ToString(),
Status = vm.Status.ToString(),
Project = project.Name,
Hypervisor = hypervisor.Name,
Gateway = managment.Gateway,
Netmask = managment.Netmask
};
return Ok(model);
}
我得到了结果:
{
"id": 1,
"name": "kubernetesvm",
"ipAddress": "185.22.98.7",
"diskSize": 500,
"cpu": 24,
"ram": 500,
"imageUrl": "https://www.google.com",
"role": "1",
"status": "0",
"project": "avengers",
"hypervisor": "kubernetes",
"gateway": "vh10",
"netmask": 24
}
应该是角色和状态的实际值。
问题是 Enum 上的 ToString()
使用默认格式说明符 "D"
,它打印 Enum 值后面的数字,但是当手动指定格式时 "G"
ToString("G")
方法 returns 源代码中的名称,这样应该可以解决您的问题,将 .ToString()
替换为 .ToString("G")
所以:
Role = vm.Role.ToString("G"),
Status = vm.Status.ToString("G")