EF迁移后NPGSQL MapEnum失败

时间:2019-05-02 16:46:25

标签: c# entity-framework entity-framework-core npgsql

我在实体框架中添加了enum并在NPGSQL as per docs中注册了它:

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

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

运行迁移并启动Web应用程序后,将引发以下异常:

  

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

如果我再次重新启动该应用程序,它就可以正常工作-仅在应用添加了MyEnum的迁移之后才发生。

1 个答案:

答案 0 :(得分:1)

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

可以通过在致电ReloadTypes()之后致电Migrate()来纠正此问题:

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

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