自动查询无法查询嵌套对象

时间:2018-07-06 03:42:38

标签: c# servicestack ormlite-servicestack servicestack-autoquery

自动查询找不到字段

我有以下几个方面:

[Route("/query/domains")]
public class QueryDomains : QueryDb<Domain, DomainList>
{
    public int MajesticApiDataTF { get; set; }
}

public class DomainList
{
    public string DomainName { get; set; }
    public int MajesticApiDataTF { get; set; }
}

[Route("/domain/{Id}")]
public class Domain : IReturn<DomainResponse>
{
    [AutoIncrement]
    public int Id { get; set; }

    [Index(Unique = true)]
    [StringLength(70)]
    public string DomainName { get; set; }  

    [Reference]
    public MajesticApiData MajesticApiData { get; set; }

}

public class MajesticApiData
{
    [AutoIncrement]
    public int Id { get; set; }
    public int TF { get; set; }
    [ForeignKey(typeof(Domain), OnDelete = "CASCADE")]
    public int DomainId { get; set; }
}

当我尝试通过TF在自动查询查看器中进行查询时,

http://localhost:5000/query/domains?MajesticApiDataTF%3E=1&MajesticApiDataTF%3E=1

所有域结果不经过过滤即返回,并且每个TF值均显示为0。

我尝试添加IJoin:

public class QueryDomains : QueryDb<Domain, DomainList>, IJoin<Domain, MajesticApiData>

但是查询没有返回结果。

我已经签入数据库,并且TF确实有一个值。我正在使用PostgreSql提供程序。

我希望它显示TF值并且可以过滤。我怎么了?

编辑:

确定,因此问题似乎在于不支持大于号运算符。

如果我这样做:

query/domains?MajesticApiDataTF>5&include=Total

然后显示调试输出

2018-07-07 01:54:00.1555||DEBUG|OrmLiteReadCommandExtensions|SQL: SELECT COUNT(*) "COUNT(*)"
FROM "domain" INNER JOIN "majestic_api_data" ON
("domain"."id" = "majestic_api_data"."domain_id")
WHERE "majestic_api_data"."tf" = :0
PARAMS: :0=0

但如果我这样做:

query/domains?MajesticApiDataTF=5&include=Total

然后传递了一个参数值。

2018-07-07 01:57:08.7809||DEBUG|OrmLiteReadCommandExtensions|SQL: SELECT COUNT(*) "COUNT(*)"
FROM "domain" INNER JOIN "majestic_api_data" ON
("domain"."id" = "majestic_api_data"."domain_id")
WHERE "majestic_api_data"."tf" = :0
PARAMS: :0=5

是否可以在连接的属性上使用大于/小于的值?如果没有,我该如何添加呢?

:修复

我将其设置为可为null的int int? MajesticApiDataTF,然后它起作用了

1 个答案:

答案 0 :(得分:1)

您可能会怀疑,AutoQuery不支持查询嵌套/引用类型。

Joins in AutoQuery还需要遵循连接的2个表中必须存在的implicit Reference conventions,它们不查询或更改加载或过滤引用数据的方式。

“自动查询”仅允许您查询目标类型(在本例中为“域”),无法过滤已加载的引用类型。