Utilizzo le ultime builder ASP.Net WebAPI Nightly (datato 2013-01-16).Restituzione di elementi figlio in ASP.NET WebAPI OData
Ho un primo modello di database EF al momento in cui sono presenti due entità: Patients and Visits. Ogni paziente può avere molte visite.
Vorrei essere in grado di richiedere il mio elenco di pazienti e fare in modo che le entità di visite per ciascun paziente siano restituite in linea. So che l'implementazione OData di WebAPI non supporta ancora $ expand. Spero che ciò significhi solo che l'espansione facoltativa controllata dal cliente non è supportata e che posso forzare l'espansione sul lato server.
Al momento non ricevo nessuna delle visite in linea.
Ad esempio, il metodo get() di mio PatientController() sembra
[Queryable(AllowedQueryOptions=AllowedQueryOptions.Supported)]
public override IQueryable<Patient> Get()
{
var query = this.entities.Patients.Include("Visits");
return query;
}
Ho verificato che la query esecuzione contro la mia base di dati in effetti include le informazioni visita.
Per utilizzare un servizio OData pubblicamente disponibile come esempio, se si utilizza il servizio allo http://services.odata.org/OData/OData.svc/, è possibile ottenere un elenco di fornitori. Questo è http://http://services.odata.org/OData/OData.svc/Suppliers. Puoi anche chiedere un elenco di fornitori che includa l'elenco di prodotti usando http://http://services.odata.org/OData/OData.svc/Suppliers?$expand=Products
Passare attraverso il codice ASP.NET (tramite il server dei simboli) Ho ottenuto il System.Web.Http.OData.Formatter .Serialization.ODataEntityTypeSerializer e può vedere che è il metodo CreatePropertyBag, che crea l'elenco delle proprietà da serializzare, ma non include le proprietà di navigazione, e non sembrano essere enumerate in nessun'altra parte oltre a essere scritte come NavigationLinks .
Sono abbastanza nuovo per il mondo ASP.NET in generale e ho trascorso una settimana circa a capire come funzionano le cose (in particolare con le modifiche apportate a OData alla fine del 2012 e ulteriori modifiche apportate in tal modo lontano nel 2013).
Sospetto che se l'ODataEntityTypeSerializer dovesse essere modificato (sono felice di provare) per incorporare queste informazioni extra nel punto appropriato (all'interno di ciascun link di navigazione come un feed in linea annidato come meglio posso dire) poi I ' d essere impostato.
Domande:
ho trascurato qualcosa di ovvio e c'è una bandiera che posso impostare per accendere questo comportamento? Posso capire perché, se tale flag esiste, sarebbe disattivato per impostazione predefinita (caricamento pigro EF e questa bandiera non andrebbe bene)
Se # 1 è no, c'è qualche altro ODataEntityTypeSerializer che potrei uso? Se sì, come posso passare ad esso?
Se il n. 2 è no, qualche indicazione per dove dovrei iniziare a scrivere da solo? C'è un posto che posso sostituire nel mio serializzatore o devo mantenere la mia forchetta del progetto di estensioni di ASP.NET (in contrapposizione al progetto Runtime)
Grazie mille!
ho il problema opposto ... I miei entità figlio sono sempre incluse nonostante mi non aver chiamato il metodo Include e specificato in questo modo. Sto usando il serializzatore JSON.Net anche se questo potrebbe fare la differenza ... –