5

これらの両方の 記事を何度も読ん$expandで、単一のエンティティでクエリ オプションを使用する方法を見つけようとしましたが、試したすべての方法で、それを機能させることができないようです。 . 他のすべてのクエリ オプションは機能し、$expand現在はコレクションの結果にも機能します。

Model : Player エンティティには Stats と呼ばれるナビゲーション プロパティがあり、各オブジェクトには特定の年のそのプレーヤーの統計が含まれています。

OData を次のように設定しました。

config.EnableQuerySupport();

ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Player>("OPlayer");
modelBuilder.EntitySet<PlayerStatistics>("OPlayerStats");

Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute", "odata", model);

もともと、私はこのようにコントローラーを設定していました:

public class OPlayerController : EntitySetController<Player, int>
{
    private readonly DatabaseContext _db = new DatabaseContext();

    protected override Player GetEntityByKey(int key)
    {
        return _db.Players.FirstOrDefault(p => p.PlayerId == key);
    }

    public override IQueryable<Player> Get()
    {
        return _db.Players.AsQueryable();
    }

    protected override void Dispose(bool disposing)
    {
        _db.Dispose();
        base.Dispose(disposing);
    }
}

この構成では、次のクエリを作成できます。

  • /odata/OPlayer(600)
  • /odata/OPlayer
  • /odata/OPlayer?$expand=Stats

しかし、明らかにそうではありません (結果は展開されません):

  • /odata/OPlayer(600)?$expand=Stats

どちらの記事でも、それをサポートするには、次のようなメソッド (アクション?) をコントローラーに追加する必要があると述べています。

[Queryable]
public SingleResult<Player> GetPlayer(int id)
{
    return SingleResult.Create(_dbContext.Players.Where(c => c.ID == id);
}

ただし、これをコントローラーに追加すると、両方/odata/OPlayer(600)とも/odata/OPlayer(600)?$expand=Stats返されますNo action was found on the controller 'OPlayer' that matches the request.

$expand単一のエンティティをサポートするために、説明を提供したり、ポインタを提供したりできますか?

4

1 に答える 1