域名模型:
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; }
}
当课程扩展到包含TeeSets时,以下查询不包括CourseRating复杂类型 GET / api / courses?$ expand = TeeSets
public class CoursesController : ApiController
{
[Queryable]
public IQueryable<Course> Get()
{
return _uow.Courses.GetAll();
}
}
JSON序列化结果不包含MensRating复杂类型(CourseRating):
[
{
"teeSets": [
{
"teeSetId": 1,
"courseId": 7
},
{
"teeSetId": 2,
"courseId": 7
}
],
"courseId": 7,
}
]
但是,针对DbContext的快速测试会在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();
}
}
使用了Entity Framework 6和Web API 2.
答案 0 :(得分:0)
您应该像MensRating
GET /api/courses?$expand=TeeSets/MensRating
当我们使用QueryableAttribute
构建支持ApiController
的隐式EDM模型时,我们将每个类型视为实体类型,以绕过OData V3限制,复杂类型无法引用实体类型。而且,这意味着您必须明确地扩展每个非基本类型。
答案 1 :(得分:0)
在MensRating
上添加AutoExpand属性可以使其工作。