2014-10-14 14 views
5

Solo una domanda rapida, non è supportata in una libreria di classi universali Win 8.1? O se lo è, qualcuno può aiutare con quello che sto facendo male.OData Expand fallisce su Client Win8.1 universal app

http://jbsapplication.azurewebsites.net/Modules?$filter=Name%20eq%20'JBS%20Electronic%20forms'&$expand=Menus 

Quando faccio questo dal browser o Fiddler ricevo la risposta corretta.

mio codice nella classe client vista del modello è la seguente (utilizzando il codice v2 client OData generato oggetti)

var application = new UriBuilder(ServiceBaseAddress); 
var context = new Models.Application(application.Uri); 

var modulesQuery = context.Modules.Expand(m=>m.Menus).Where(m => m.Name == ApplicationName); 
var modules = await ((DataServiceQuery<Module>) modulesQuery).ExecuteAsync(); 
_currentModule = modules.FirstOrDefault(); 

la seguente eccezione viene generata sull'ultima riga

Una prima eccezione di possibilità di tipo "Microsoft.OData.Core.ODataException" si è verificato in Microsoft.OData.Core.DLL

Ulteriori informazioni: quando si scrive una risposta JSON, è necessario specificare un modello utente e il set di entità e il tipo di entità devono essere passati al ODataMessag Il metodo eWriter.CreateODataEntryWriter o ODataFeedAndEntrySerializationInfo deve essere impostato su ODataEntry o ODataFeed in fase di scrittura.

Se rimuovo la parte Espansione della richiesta, è tutto a posto, ma è necessario eseguire un altro round trip per ottenere i menu.

Un tagliato di riferimento per la classe del modulo:

[Key("Id")] 
public class Module: BindableBase 
{ 
    public string Name 
    { 
     get { return _name; } 
     set { SetProperty(ref _name, value); } 
    } 

    DataServiceCollection<Menu> _menus = new DataServiceCollection<Menu>(null,TrackingMode.AutoChangeTracking); 

    public DataServiceCollection<Menu> Menus 
    { 
     get { return _menus; } 
     set 
     { 
      _menus = value; 
      OnPropertyChanged("Menus"); 
     } 
    } 
} 

risposta

5

ho incontrato il problema che si descrive quando ho dimenticato di aggiungere l'entità espansione nel ODataModelBuilder come EntitySet. Prova questo nel vostro Web API ASP.NET OData:

builder.EntitySet<Menus>("Menus"); 
+1

Ho trovato che il client JavaScript potrebbe espandere la query fine senza l'entità di espansione in ODataModelBuilder; il client .NET invece richiedeva che l'entità espandente venisse aggiunta a ODataModelBuilder. – Bvrce

+0

@Bvrce indovina che ha senso - cioè differenze nella tipizzazione forte vs debole in JS vs C# .net – MemeDeveloper

0

modelli con un bisogno proprietà ID essere esplicitamente esteso dai clienti, e modelli espandibili devono essere registrati come entitysets con il costruttore per il cliente generato automaticamente OData essere in grado di chiamare espandere.

Problemi correlati