2015-03-13 83 views
2

不确定这是Breeze还是ODATA问题。BreezeJS/ODATA:只能对实体类型执行强制转换

我在我的ODATA查询的执行具有以下错误:

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

过滤器看起来是这样的:

$过滤器:(JobGroup/JobJobGroup /任何(X1:X1 /job.volume EQ 10D))

where子句是使用JSON符号建:

{ "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 
{ 

} 

难道是与工作有关的类是抽象的?

+0

当然是。该错误明确指出,子类型不是实体类型,这意味着您没有“DbSet”,这是合理的,因为它是抽象的。你怎么能要求从数据库中不存在的对象传递给数据库的查询中的数据? – Claies 2015-03-16 11:28:54

+0

当然,我有作业类映射到数据库中的表。它在所有情况下都能正常工作,但是这一个。我用另一个从Job继承的类来编辑我的OP。 – Sam 2015-03-16 11:47:19

回答

2

对任何谓词使用JSON语法时,必须使用/而不是用于成员访问。这是的OData格式

所以JSON变为:然后

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

你的OData查询将是:

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

注:次要的问题可能是属性名的外壳,他们应该完全匹配您的模型中的名称。例如。第V章工作/卷。

相关问题