Search code examples
c#asp.net-web-apiodata

how many can use nested entity class in odata service


I'm implementing like ODataServiceSample project

It's says,you can request from client for nested entity :

var query = ctx.ProductFamilies.Where(p => p.ID == 3).SelectMany(p => p.Products);

And server side, support for /ProductFamilies(1)/Products:

ProductFamiliesController : EntitySetController<ProductFamily, int>
{
    /// <summary>
    /// Support for /ProductFamilies(1)/Products
    /// </summary>
    [Queryable]
    public IQueryable<Product> GetProducts([FromODataUri] int key)
    {
        return _db.ProductFamilies.Where(pf => pf.ID == key).SelectMany(pf => pf.Products);
    }
}

how to do support for /ProductFamilies(1)/Products(1)/BatchNumbers on server side?


Solution

  • You need another EntitySetController for Product and do exactly the same as you did for ProductFamily entity set, i.e.:

    ProductsController : EntitySetController<Product, int>
    {
       /// <summary>
       /// Support for /Products(1)/BatchNumbers
       /// </summary>
       [Queryable]
       public IQueryable<BatchNumber> GetBatchNumberss([FromODataUri] int key)
       {
           return _db.Products.Where(p => p.ID == key).SelectMany(p => p.BatchNumbers);
       }
    }