2017-04-06 8 views
1

に関連するエンティティを展開します。は自動的に私は、これらのクラスを持っているのODataコントローラ

public class Items 
    { 
    [Key] 
    public Guid Id { get; set; } 
    public string ItemCode { get; set; } 
    public decimal SalesPriceExcl { get; set; } 
    public decimal SalesPriceIncl { get; set; } 

    public virtual ICollection<ItemPrice> SalesPrices { get; set; } 

    public Items() 
    { 
     SalesPrices = new HashSet<App4Sales_ItemPrice>(); 
    } 
} 

public class ItemPrice 
{ 
    [Key, Column(Order = 0), ForeignKey("Items")] 
    public Guid Id { get; set; } 
    public virtual Items Items { get; set; } 

    [Key, Column(Order=1)] 
    public Guid PriceList { get; set; }   
    public decimal PriceExcl { get; set; } 
    public decimal PriceIncl { get; set; } 
    public decimal VatPercentage { get; set; }   

} 

私はアイテムを照会し、自動的にItemPriceコレクションを取得したいです。

私はODataのV3コントローラ作成しました:

// GET: odata/Items 
    //[Queryable] 
    public IQueryable<Items> GetItems(ODataQueryOptions opts) 
    { 
     SelectExpandQueryOption expandOpts = new SelectExpandQueryOption(null, "SalesPrices", opts.Context); 
     Request.SetSelectExpandClause(expandOpts.SelectExpandClause); 
     return expandOpts.ApplyTo(db.Items.AsQueryable(), new ODataQuerySettings()) as IQueryable<Items>; 


    } 

をしかし、私はエラーを取得する: は "ヌルフィードをシリアル化できない"

はい、いくつかのアイテムが何ItemPriceリストを持っていません。

このエラーが発生する可能性がありますか、違うことができますか? タイプのオブジェクトをキャストすることができません 'System.Data.Entity.Infrastructure.DbQuery 1[System.Web.Http.OData.Query.Expressions.SelectExpandBinder+SelectAllAndExpand 1 [.Models.Items]':

一種である、私は根本的なエラーを発見

イェルーン

に関して に「.Models.Items」と入力します。私はこの記事に出くわした後、私はそれを解決してきました

答えて

0

http://www.jauernig-it.de/intercepting-and-post-processing-odata-queries-on-the-server/

は、これが今の私のコントローラである:

SelectExpandQueryOption expandOpts = new SelectExpandQueryOption(null, "SalesPrices", opts.Context); 

     Request.SetSelectExpandClause(expandOpts.SelectExpandClause); 

     var result = expandOpts.ApplyTo(db.Items.AsQueryable(), new ODataQuerySettings()); 
     var resultList = new List<Items>(); 

     foreach (var item in result) 
     { 
      if (item is Items) 
      { 
       resultList.Add((Items)item); 
      } 
      else if (item.GetType().Name == "SelectAllAndExpand`1") 
      { 
       var entityProperty = item.GetType().GetProperty("Instance"); 
       resultList.Add((Items)entityProperty.GetValue(item)); 
      } 
     } 


     return resultList.AsQueryable(); 

のJeroen

0

のgetItems([FromODataUri] ODataQueryOptionsのqueryOptions)

+0

これは呼び出されるとエラーになります。基礎となるエラーの編集を参照してください –

関連する問題