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();
}
}
我在 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();
}
}