2013-11-22 88 views
3

領域模型:

public class Course 
{ 
    public int CourseId { get; set; } 
    public virtual ICollection<TeeSet> TeeSets { get; set; } 
} 
public class TeeSet 
{ 
    public int TeeSetId { get; set; } 
    public int CourseId { get; set; } 
    public CourseRating MensRating { get; set; } 
} 

下面的查詢不包括CourseRating複雜類型時被擴展課程包括TeeSets。 ?
GET/API /課程$擴大= TeeSets

public class CoursesController : ApiController 
{ 
    [Queryable] 
    public IQueryable<Course> Get() 
    { 
     return _uow.Courses.GetAll(); 
    } 
} 

的JSON序列化的結果不包括MensRating複雜類型(CourseRating):反對的DbContext回報

[ 
    { 
"teeSets": [ 
    { 
    "teeSetId": 1, 
    "courseId": 7 
    }, 
    { 
    "teeSetId": 2, 
    "courseId": 7 
    } 
    ], 
    "courseId": 7, 
    } 
] 

然而,快速測試TeeSets上的CourseRating複雜類型就像我期望的那樣:

[TestMethod] 
public void Get_Course_With_TeeSets() 
{ 
    using (CoursesContext ctx = new CoursesContext()) 
    { 
     var courses = ctx.Courses.Where(x => x.CourseId == 7).Include(x => x.TeeSets).FirstOrDefault(); 
    } 
} 

使用實體框架6和Web API 2。

回答

0

你應該擴大MensRating以及這個樣子,GET /api/courses?$expand=TeeSets/MensRating

當我們建立與ApiController支持QueryableAttribute一個隱含的EDM模型,我們對待每一個類型作爲實體類型,以繞過的OData V3限制,即複雜類型不能請參考實體類型。而且,這意味着您必須顯式擴展每個非基本類型。

+2

是的,我試過這個,但是拋出了一個NotSupportedException。 「無法比較'StatTracker.Domain.CourseRating'類型的元素,只支持原始類型,枚舉類型和實體類型。」看起來只有當通過$ expand包含包含實體時纔會發生這種情況,因爲包含CourseRating複雜類型的另一個實體對於GET或POST可以正常工作。 –

0

MensRating上添加AutoExpand屬性可以使這項工作。