EF 迁移后 NPGSQL MapEnum 失败

NPGSQL MapEnum fails after EF migration

我在 entity framework 中添加了一个 enum 并使用 NPGSQL 注册了它,as per docs:

static DataContext()
{
    NpgsqlConnection.GlobalTypeMapper.MapEnum<MyEnum>();
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.ForNpgsqlHasEnum<MyEnum>();
    ...
}

运行 次迁移并启动 Web 应用程序后,抛出以下异常:

The CLR enum type MyEnum must be registered with Npgsql before usage, please refer to the documentation

如果我再次重新启动应用程序,它会正常工作 - 这只会在应用添加了 MyEnum 的迁移后立即发生。

问题是 NPGSQL 的类型映射在迁移发生后与数据库不同步,types need to be reloaded after migrations are performed

这可以通过在调用 Migrate() 之后调用 ReloadTypes() 来纠正:

public void Migrate()
{
    Database.Migrate();

    using (var connection = (NpgsqlConnection)Database.GetDbConnection())
    {
        connection.Open();
        connection.ReloadTypes();
    }
}