Ho alcuni oggetti POCO che sto usando in un codice EF Primo contesto. Quindi, quando li riempio con i dati, mi occupo effettivamente degli oggetti proxy EF piuttosto che degli stessi POCO.Qual è il modo migliore per trasformare un oggetto proxy EF nell'oggetto POCO originale?
Ho un ApiController ASP.NET MVC4 che restituisce i miei oggetti POCO, che consumerò nella mia applicazione client.
mio "GET" metodo simile a questa:
// GET api/Clients/5
public Client GetClient(int id)
{
Client client = db.Clients.Find(id);
if (client == null)
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
}
return client;
}
che in realtà non funziona, perché quando il serializzatore tenta di serializzare l'oggetto client, in realtà è che fare con la versione delega EF, che provoca a singhiozzo. Vedere Can an ApiController return an object with a collection of other objects?
Così, ho potuto disattivare la generazione di proxy in questo modo al mio DbContext
:
db.Configuration.ProxyCreationEnabled = false;
che assicura che ho a che fare con la POCO piuttosto che un proxy. Ma, ora la maggior parte dei membri della mia classe Client non sono popolati, dal momento che era il proxy EF che faceva il pigro carico di quelli per me.
Quindi quello che voglio veramente è usare la classe proxy EF per ottenere i dati, e poi all'ultimo minuto restituire il POCO originale dal mio metodo.
Come posso farlo senza creare manualmente l'intero oggetto da zero (compresi eventuali oggetti nidificati) nel codice? Sicuramente ci deve essere un modo semplice - o almeno una classe di aiuto di qualche tipo?
+1 esponendo DTOs al client remoto è il modo migliore per andare. Ti dà il pieno controllo sui dati inviati attraverso il filo. –
Grazie, controllerò AutoMapper - sembra solo la "classe di aiuto di qualche tipo" che stavo cercando. –