C# 栏「;路径“;类型为ltree,但表达式类型为text

C# 栏「;路径“;类型为ltree,但表达式类型为text,c#,.net,postgresql,entity-framework-core,npgsql,C#,.net,Postgresql,Entity Framework Core,Npgsql,我使用Npgsql.EntityFrameworkCore.PostgreSQL库。 如何通过Entity Framework Core在PostgreSQL表中插入/更新ltree列? 数据库表: CREATE TABLE Entity (path ltree); 关于模型创建: modelBuilder.HasPostgresExtension("ltree"); ... entity.Property(e => e.Path).HasColumnName("path").HasCo

我使用Npgsql.EntityFrameworkCore.PostgreSQL库。 如何通过Entity Framework Core在PostgreSQL表中插入/更新ltree列? 数据库表:

CREATE TABLE Entity (path ltree);
关于模型创建:

modelBuilder.HasPostgresExtension("ltree");
...
entity.Property(e => e.Path).HasColumnName("path").HasColumnType("ltree");
实体:

public string Path { get; set; }
在插入时,我得到了一个错误:

Npgsql.postgresception:42804:列“path”的类型为ltree,但 表达式为文本类型


Npgsql目前不支持ltree类型,因为PostgreSQL不为其提供二进制输入/输出函数(Npgsql在默认情况下仅为二进制)。相关问题是


在使用ADO.NET API时,仍然可以像其他不支持二进制的类型一样,在文本模式下读写ltree-有关如何执行此操作,请参阅。但是,您似乎正在尝试使用EF Core,这是不可能的。

请查看官方文档。我认为
ltree
不受官方支持。是否可以将其用作“文本”字段?看起来一些CAST应该会解决这个问题,因为我可以在不同的DB management Studio中以文本的形式读/写ltree,并且可以通过ADO.NET SQLCommands将数据发送到ltree正如上面的常见问题所说,只要您使用的是ADO.NET API而不是EF,就可以以文本字段的形式读/写。查看
AllResultTypesAreUnknown
。编写时,您可以将参数的值设置为string,并将NpgsqlDbType设置为Unknown。看起来它现在还不受支持-仅在ADO.NET层,而不是EF核心提供程序中添加了对ltree的支持。