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")