如何获取OData导航属性

时间:2014-01-26 10:07:49

标签: c# asp.net-mvc angularjs asp.net-web-api odata

在我的OData控制器中,我有这样的方法:

// GET odata/Fixtures(5)
public SingleResult<Fixture> GetFixture([FromODataUri] int key)
{
    return SingleResult.Create(db.Fixtures.Where(fixture => fixture.FixtureId == key));
}

// GET odata/Fixtures(5)/City
[Queryable]
public SingleResult<City> GetCity([FromODataUri] int key)
{
    return SingleResult.Create(db.Fixtures.Where(m => m.FixtureId == key).Select(m => m.City));
}

// GET odata/Fixtures(5)/Team
[Queryable]
public SingleResult<Team> GetTeam([FromODataUri] int key)
{
    return SingleResult.Create(db.Fixtures.Where(m => m.FixtureId == key).Select(m => m.Team));
}

如何从Fixtures系列中获取AngularJs的城市和团队?这不能得到它们:

<tbody>
    <tr ng-repeat="fixture in fixtures | orderBy:'FixtureId'" id="fixture_{{fixture.id}}">
        <td>{{fixture.FixtureId}}</td>
        <td>{{fixture.City.CityName}}</td>
        <td>{{fixture.Team.TeamName}}</td>
        ...
    </tr>
</tbody>

我是否需要在GetCity中引用GetTeamGetFixture来返回看起来像这样的DTO:

class FixtureDTO
{
    public int FixtureId { get; set; }
    public string CityName { get; set; }
    public string TeamName { get; set; }
}

如果有的话,有人会举例说明我会这样做吗?还是我完全以错误的方式接近这个?

非常感谢任何建议!

1 个答案:

答案 0 :(得分:0)

我使用$ expand odata关键字在服务器响应中包含导航属性以查询Fixtures。 这样做,您的客户端代码必须正常工作。