postgresql - 如何在 .net 核心上使用 ef 核心映射 postgresql 中的枚举(首先是数据库)

标签 postgresql entity-framework .net-core entity-framework-core db-first

我正在编写一个中间件来记录我收到的异常。

我在postgresql上创建枚举值

enter image description here

并将其映射到我的日志表

enter image description here

我的日志模型是:

   public class Log
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [JsonIgnore]
    public int Id { get; set; }
    public EventType EventType { get; set; }
    public string Description { get; set; }
    public DateTime CreatedAt { get; set; }

}

我的错误中间件是:

        var log = new Log();
        log.Description = ex.Message;
        log.EventType = EventType.Exception;
        log.CreatedAt = DateTime.Now;

        Context.Add(log);
        Context.SaveChanges();

(这是在界面上出现的,但我想尽快展示)

我的背景:

 protected override void OnModelCreating(ModelBuilder model)
    {
        model
            .HasPostgresEnum(null, "event_type", new[] { "info", "unknown", "warning", "exception" });


  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder
            .UseNpgsql(Configuration.GetConnectionString("MyConnection"))
            .UseCamelCaseNamingConvention();
        NpgsqlConnection.GlobalTypeMapper.MapEnum<EventType>("enum_logs_eventType");
    }

我想我做的一切都是对的。它是 DB First,所以我迁移了数据库,但我认为您在那里执行了相同的步骤。

当我运行该服务并触发任何错误时,我收到此错误:

enter image description here

When I try to cast to string or run .HasConversion or something i get this error:
 

stringError

最佳答案

Posthresql枚举值区分大小写。所以当我删除枚举并再次修复它们时(它们都是小写的),错误就解决了。

关于postgresql - 如何在 .net 核心上使用 ef 核心映射 postgresql 中的枚举(首先是数据库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66163861/

相关文章:

c# - 如何在Docker中构建.Net核心应用程序?

java - 如何使用RDBMS DML创建任意错误

MySQL 和 PostgreSQL 行子查询运算符

postgresql - Postgres,函数 "jsonb_extract_path_text"没有给出结果

entity-framework - Entity Framework 更新多对多关系 - POCO

c# - 在不添加任何数据的情况下重新生成 Code-First 数据库

java - Jooq 数组作为集合

c# - 在动态数据项目中动态更改数据注释

c# - ResourceManager 返回文件名

asp.net - ASPNET5类库抛出当前运行时目标框架与 '<ProjectName>'不兼容