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");
}
}
}
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
@Bvrce indovina che ha senso - cioè differenze nella tipizzazione forte vs debole in JS vs C# .net – MemeDeveloper