2011-02-10 13 views
5

Ho un servizio Web che utilizza Entity Framework per l'archiviazione e espone un'API pubblica per le operazioni CRUD.Come restituire un'entità che è una query di più tabelle

Se ho un ente come l'utente che ha un 1 a molti relazione con un'entità auto, come faccio a tornare facilmente nel mio metodo di servizio Web di GetUser (int userId) un'istanza di utente che assomiglia a questo:

public class User{ 
    string Id; 
    IEnumberable<Car> Cars; 
} 

Questo funziona per impostazione predefinita all'interno del framework entità, poiché presumo che la proprietà Cars sia pigro quando lo si utilizza dal lato server.

+0

La classe 'Utente' è qualcosa di diverso dal proprio tipo di entità' Utente'? –

risposta

2

Gli oggetti entità sono serializzabili e si otterrà automaticamente la proprietà Cars.

Tuttavia, a seconda della query LINQ, la proprietà Cars potrebbe non essere stata caricata. Se vuoi sempre caricare la proprietà Cars all'interno del tuo metodo web, allora dovresti caricare esplicitamente la proprietà. Di seguito sono riportati alcuni modi per garantire di caricare la proprietà Cars.

1) utilizzare il metodo Include ("Automobili") nella query LINQ.

2) utilizzare la proiezione.

3) Caricare esplicitamente la proprietà Cars su un'istanza di un oggetto Utente. Ad esempio,

userA.Cars.Load() 
0

Ho usato LINQ-To-SQL per ottenere un risultato simile, e per me ha "funzionato". Lo proverei e vedrò cosa succede. Potrebbe essere necessario definire esplicitamente lo [DataContract] sugli articoli.

2

Prima di tutto si dovrebbe [Include] Cars presso la definizione dei metadati di User entità. Inoltre, probabilmente dovrai riscrivere il metodo getUsers() per riempire le auto. Qualcosa come questo.

public IQueryable<User> GetUsers() 
{ 
    return this.ObjectContext.User.Include("Cars"); 
} 

Non è facile da spiegare in breve, vi consiglio di visitare this, e this siti web.

La speranza aiuta!

Problemi correlati