如何在 .net 核心上使用 ef 核心在 postgresql(db first)中映射枚举
Posted
技术标签:
【中文标题】如何在 .net 核心上使用 ef 核心在 postgresql(db first)中映射枚举【英文标题】:How to mapping enum in postgresql (db first) with ef core on .net core 【发布时间】:2021-05-15 17:34:59 【问题描述】:我正在编写一个记录我得到的异常的中间件。
我在postgresql上创建了枚举值
并将其映射到我的日志表
我的日志模型是:
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,所以我迁移了数据库,但我认为您在那里执行了相同的步骤。
当我运行服务并触发任何错误时,我会收到此错误:
When I try to cast to string or run .HasConversion or something i get this error:
【问题讨论】:
EventType.Exception
值显然是“异常”,而 Posthresql enum_logs_eventType
包含“异常”。 Posthresql enum
值区分大小写。因此枚举“enum_logs_eventType”的输入值无效:“异常”。
这个信息解决了我的问题。我删除并重新创建了枚举值。你能把这个写成答案吗?如果有人遇到此错误,他们可能看不到此评论。
【参考方案1】:
Posthresql 枚举值区分大小写。所以当我删除枚举并再次修复它们时(它们都是小写的),错误就解决了。
【讨论】:
以上是关于如何在 .net 核心上使用 ef 核心在 postgresql(db first)中映射枚举的主要内容,如果未能解决你的问题,请参考以下文章
带有 EF Core 更新实体的 ASP.Net 核心 Web Api 如何
如何根据 HTTP 响应中的条件返回不同的对象类型(.net 核心)