-
Notifications
You must be signed in to change notification settings - Fork 257
Closed
Milestone
Description
Enum mapping works as advertised given a CLR enum (SomeEnum) and an equivalent PostgreSQL enum (some_enum):
static SomeDbContext()
{
// works as advertised for public.some_enum
NpgsqlConnection.GlobalTypeMapper.MapEnum<SomeEnum>();
}However, if some_enum is created in some_schema rather than the public schema, the normal mapping behavior does not work:
static SomeDbContext()
{
// does *not* work for some_schema.some_enum
NpgsqlConnection.GlobalTypeMapper.MapEnum<SomeEnum>();
}Instead, an explicit schema-qualified name needs to be provided:
static SomeDbContext()
{
// does work for some_schema.some_enum
NpgsqlConnection.GlobalTypeMapper.MapEnum<SomeEnum>("some_schema.some_enum");
}This behavior makes sense to a certain extent, but it would be nice if the default schema confgured for the DbContext could be detected and used for enum mapping:
protected override void OnModelCreating(ModelBuilder builder)
=> builder.HasDefaultSchema("some_schema");CREATE SCHEMA test;
CREATE TYPE mapped_enum AS ENUM ('happy', 'sad');
CREATE TYPE test.manual_enum AS ENUM ('happy', 'sad');
CREATE TABLE some_table (
id int,
mapped_enum mapped_enum,
manual_enum test.manual_enum
);public class SomeTable
{
public int Id { get; set; }
public MappedEnum MappedEnum { get; set; }
public ManualEnum ManualEnum { get; set; }
}
public class EnumContext : DbContext
{
public DbSet<SomeTable> SomeTable { get; set; }
static EnumContext()
{
NpgsqlConnection.GlobalTypeMapper.MapEnum<MappedEnum>();
NpgsqlConnection.GlobalTypeMapper.MapEnum<ManualEnum>();
}
public EnumContext(DbContextOptions options) : base(options) {}
protected override void OnModelCreating(ModelBuilder builder)
=> builder.ForNpgsqlHasEnum("mapped_enum", new[] { "happy", "sad" })
.HasDefaultSchema("test");
}Reactions are currently unavailable