Npgsql.PostgresException: 类型 "ltree" 不存在
Npgsql.PostgresException: type "ltree" does not exist
我正在开发具有 asp.net 核心 [net5.0]
的 WebAPI
- 数据库:PostgreSQL
- 提供商:EF Core
- 方法:代码优先
在域对象中,我使用 Ltree
作为层次结构。添加和更新迁移时,出现以下错误:Npgsql.PostgresException: type "ltree" does not exist
.
我做了一些研究,发现如果我在 PostgreSQL 数据库上 运行 "create extension Ltree"
,这将为 Ltree 创建扩展。
在代码优先方法中,将在添加和更新迁移时创建数据库,因此我无法转到数据库并为此创建扩展。
我的问题是:是否可以在迁移中创建扩展?
public class Department
{
public int Id { get; set; }
[Column(TypeName = "Ltree")]
public string Ltree { get; set; }
public string Name { get; set; }
}
您可以通过在 model-building 代码中添加以下行(例如 OnModelCreating)让 EF Core 为您创建扩展:
modelBuilder.HasPostgresExtension("ltree");
请注意,在 7.0 版中,提供程序将自动检测是否需要扩展(通过检查您的模型属性),并将添加适当的 PostgreSQL 扩展,而无需您明确地执行此操作(请参阅 https://github.com/npgsql/efcore.pg/issues/2137).
我正在开发具有 asp.net 核心 [net5.0]
的 WebAPI- 数据库:PostgreSQL
- 提供商:EF Core
- 方法:代码优先
在域对象中,我使用 Ltree
作为层次结构。添加和更新迁移时,出现以下错误:Npgsql.PostgresException: type "ltree" does not exist
.
我做了一些研究,发现如果我在 PostgreSQL 数据库上 运行 "create extension Ltree"
,这将为 Ltree 创建扩展。
在代码优先方法中,将在添加和更新迁移时创建数据库,因此我无法转到数据库并为此创建扩展。
我的问题是:是否可以在迁移中创建扩展?
public class Department
{
public int Id { get; set; }
[Column(TypeName = "Ltree")]
public string Ltree { get; set; }
public string Name { get; set; }
}
您可以通过在 model-building 代码中添加以下行(例如 OnModelCreating)让 EF Core 为您创建扩展:
modelBuilder.HasPostgresExtension("ltree");
请注意,在 7.0 版中,提供程序将自动检测是否需要扩展(通过检查您的模型属性),并将添加适当的 PostgreSQL 扩展,而无需您明确地执行此操作(请参阅 https://github.com/npgsql/efcore.pg/issues/2137).