2013-11-22 33 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属性可以使这项工作。