2014-10-14 26 views
5

Po prostu szybkie pytanie, czy nie jest to obsługiwane w uniwersalnej bibliotece klas Win 8.1? A jeśli tak, czy ktoś może pomóc w tym, co robię źle.Rozszerzenie OData kończy się niepowodzeniem w aplikacji klienta Win8.1 Universal

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

Kiedy robię to z przeglądarki lub Skrzypka, otrzymuję poprawną odpowiedź.

Mój kod w klasie klient widok modelu jest następująca (przy użyciu OData Client kod v2 generowane obiektów)

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(); 

następujący wyjątek jest generowany na ostatniej linii

Pierwsza szansa wyjątkiem wpisz "Microsoft.OData.Core.ODataException" wystąpił w Microsoft.OData.Core.DLL

Informacje dodatkowe: Podczas wpisywania odpowiedzi JSON należy określić model użytkownika, a zestaw jednostek i typ jednostki muszą zostać przekazane do ODataMessag Metoda eWriter.CreateODataEntryWriter lub ODataFeedAndEntrySerializationInfo musi być ustawiona na ODataEntry lub ODataFeed, która jest zapisywana.

Jeśli usunę część Expand żądania, wszystko będzie dobrze, ale muszę wykonać kolejną podróż w obie strony, aby uzyskać menu.

ściętego odniesienie dla klasy modułu:

[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"); 
     } 
    } 
} 

Odpowiedz

5

Mam napotkał pan opisać gdy zapomniałem dodać jednostkę rozszerzającą do ODataModelBuilder jako EntitySet problem. Spróbuj to w ASP.NET Web API OData:

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

Zauważyłem, że klient JavaScript może rozwinąć kwerendę grzywny bez rozwijanej encji w ODataModelBuilder; Z drugiej strony klient .NET wymagał dodania encji rozwijanej do ODataModelBuilder. – Bvrce

+0

@ Bvrce domyślam się, że ma to sens - np. Różnice w silnym lub słabym pisaniu w JS vs C# .net – MemeDeveloper

0

modeli z konieczności właściwość ID być wyraźnie rozszerzony przez klientów, a modele rozszerzalne muszą być rejestrowane jako entitysets z konstruktora do automatycznego generowane OData klienta aby móc wywoływać expand.

Powiązane problemy