postgresql - 无法使用“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。
解决方案
不幸的是,Fluent API 不支持这一点——你必须编辑你的脚手架迁移并使用原始 SQL来表达这一点。
提供者确实有一个 Fluent API 用于指定操作符类,但没有用于指定选项(例如 siglen)。
推荐阅读
- html - 如何在盒子的右上角放置一个盒子?
- python - 在不创建临时文件的情况下,将 xlsx 从 azure blob 存储读取到 pandas 数据帧
- html - 下载网站(批量)HTML源代码
- r - 将因子转换为 R 中的字符向量
- linux - brew install docker-machine-driver-xhive
- apache - 在哪里编辑(文档的哪一部分)LAMP 服务器主机文件?[和正确的语法]
- javascript - 为什么我得到 bar.addEventListener 不是函数
- java - 如果未找到未使用的 2 级依赖 jar,为什么 maven 编译器插件会失败
- javascript - 如何使用 parcel-bundler 将公共目录中的所有文件添加到构建目录
- vue.js - Nuxtjs如何在所有sass文件中添加全局环境变量