2015-03-13 84 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章工作/卷。

相關問題