列“path”的类型为ltree,但表达式的类型为text

时间:2017-11-21 13:31:13

标签: c# .net postgresql entity-framework-core npgsql

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

CREATE TABLE Entity (path ltree);

OnModelCreating:

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

实体:

public string Path { get; set; }

在插入时我得到了错误:

  

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

1 个答案:

答案 0 :(得分:1)

Npgsql当前不支持ltree类型,因为PostgreSQL没有为它提供二进制输入/输出函数(并且Npgsql默认是二进制的)。相关问题是https://github.com/npgsql/npgsql/issues/699

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