我在实体框架中添加了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
的迁移之后才发生。
答案 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();
}
}