首页 > 解决方案 > 无法使用“gist_ltree_ops(siglen=100)”在 EF Core 代码优先方法中设置签名强度

问题描述

我正在使用 EF Core 代码优先方法并尝试使用以下代码段配置列类型 ltree 的签名强度。

public class Node
{
    public Guid Id { get; set; }
    public LTree Path { get; set; }
    public string Name { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.HasPostgresExtension("ltree");
    modelBuilder.Entity<Node>().HasIndex(x => x.Path).HasMethod("gist");           

}

这只是创建一个默认签名长度为 8 个字节的索引。我想通过明确指定长度来覆盖这个签名长度,就像我们在 postgres 查询编辑器中所做的那样

CREATE INDEX "IX_Nodes_Path" ON public."Nodes" USING gist ("Path" gist_ltree_ops (siglen='100'))

实现这一目标的任何指示都将大有帮助。

我正在使用 posgres 版本 14.0、EF Core 6 rc、npgsql 6 rc。

标签: postgresqlentity-framework-corenpgsqlltree

解决方案


不幸的是,Fluent API 不支持这一点——你必须编辑你的脚手架迁移并使用原始 SQL来表达这一点。

提供者确实有一个 Fluent API 用于指定操作符类,但没有用于指定选项(例如 siglen)。


推荐阅读