BreezeJS / ODATA:转换只能在实体类型上执行

时间:2015-03-13 08:37:44

标签: javascript c# odata breeze

不确定这是否是Breeze或ODATA问题。

执行ODATA查询时出现以下错误:

The child type 'job.volume' in a cast was not an entity type. Casts can only be performed on entity types.

过滤器如下所示:

$ filter:(JobGroup / JobJobGroup / any(x1:x1 / job.volume eq 10d))

使用JSON表示法构建where子句:

{ "jobGroup.jobJobGroup": { "any": { "job.volume": { "eq": 10 } } } }

模型(仅相关部分):

public class WorkflowTask
{
    public virtual JobGroup JobGroup { get; set; }
}

public class JobGroup
{
    public virtual IList<JobJobGroup> JobJobGroup { get; set; }
}

public class JobJobGroup
{
    public virtual Job Job { get; set; }
    public virtual Guid JobId { get; set; }
    public virtual JobGroup JobGroup { get; set; }
    public virtual Guid JobGroupId { get; set; }
}

public abstract class Job
{
    public virtual Decimal Volume { get; set; }
}

public class JobEditing : Job
{

}

它可能与Job类是抽象的吗?

1 个答案:

答案 0 :(得分:5)

将JSON语法与任何谓词一起使用时,必须使用 / 而不是进行成员访问。这是odata格式

所以JSON变成了:

{ "JobGroup.JobJobGroup": { "any": { "Job/Volume": { "eq": 10 } } } }

您的odata查询将是:

$filter:(JobGroup/JobJobGroup/any(x1: x1/Job/Volume eq 10d))

注意:次要问题可能是属性名称的大小写,它们应该与模型中的名称完全匹配。例如。第五章为工作/卷。