【问题标题】:Set formula for Computed column of PostgreSQL table in Entity Framework Core在 Entity Framework Core 中为 PostgreSQL 表的计算列设置公式
【发布时间】:2021-12-02 18:08:16
【问题描述】:

我有一个简单的模型,它带有 Id 和一个 json 属性和一个计算列,它是 json 列中 'tile' 键的值

public class Book 
{
    public int Id { get; set; }

    [Column(TypeName="jsonb")]
    public string JsonInfo { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public string Title { get; set; }
}

在配置中我设置了Title的值的计算方式:

    builder.Property(t => t.Title).HasComputedColumnSql("(\"JsonInfo\"->>''title'')", stored:true).HasColumnType("varchar(150)");

迁移构建没有问题,但不幸的是数据库更新以错误结束:

42601: syntax error at or near "title"

问题在于"(\"JsonInfo\"->>''title'')"title 是如何被转义的。我该如何解决?

顺便提一下,我使用的是最新版本的 PostgreSQL

【问题讨论】:

    标签: postgresql entity-framework-core npgsql


    【解决方案1】:

    你不应该用两次单引号来转义标题;您提供给 HasComputedColumnSql 的 SQL 不是文本文字,而是实际的 SQL。所以以下应该工作:

    .HasComputedColumnSql("\"JsonInfo\"->>'title'", stored: true)
    

    【讨论】:

    • 感谢@Shay-rojansky,但我实际上通过指定列类型解决了问题:("\"JsonInfo\"::jsonb->>'title'::text")
    • 你不应该需要那个 - 尝试删除 ::jsonb 部分。可能解决问题的方法是,title 周围不再有两个单引号。
    猜你喜欢
    • 2021-03-23
    • 2019-04-02
    • 1970-01-01
    • 2021-02-02
    • 2020-09-11
    • 1970-01-01
    • 2016-08-06
    • 2022-11-17
    • 2018-04-27
    相关资源
    最近更新 更多