EF 迁移后 NPGSQL MapEnum 失败

eou*_*3hf 3 c# entity-framework npgsql entity-framework-core

根据文档enum,我添加了一个实体框架并将其注册到 NPGSQL 中:

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

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.ForNpgsqlHasEnum<MyEnum>();
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

CLR 枚举类型 MyEnum 必须在使用前向 Npgsql 注册,请参考文档

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

eou*_*3hf 8

问题是在迁移发生后 NPGSQL 的类型映射与数据库不同步,并且在执行迁移后需要重新加载类型

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

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

    using (var connection = (NpgsqlConnection)Database.GetDbConnection())
    {
        connection.Open();
        connection.ReloadTypes();
    }
}
Run Code Online (Sandbox Code Playgroud)