如何在 .net 核心上使用 ef 核心映射 postgresql 中的枚举(首先是数据库)
How to mapping enum in postgresql (db first) with ef core on .net core
我正在编写一个中间件来记录我收到的异常。
我在postgresql上创建了枚举值
并将其映射到我的日志中 table
我的日志模型是:
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:
Posthresql枚举值区分大小写。所以当我删除枚举并再次修复它们时(它们都是小写的),错误就解决了。
我正在编写一个中间件来记录我收到的异常。
我在postgresql上创建了枚举值
并将其映射到我的日志中 table
我的日志模型是:
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:
Posthresql枚举值区分大小写。所以当我删除枚举并再次修复它们时(它们都是小写的),错误就解决了。