Tengo algunos objetos POCO que estoy usando en un contexto de Código EF Primero. Entonces, cuando los llevo con datos, en realidad estoy lidiando con los objetos proxy EF en lugar de los POCOs mismos.¿Cuál es la mejor manera de convertir un objeto proxy EF en el objeto POCO original?
Tengo un ASP.NET MVC4 ApiController que devuelve mis objetos POCO, que consumiré en mi aplicación cliente.
Mi "GET" método es como la siguiente:
// 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;
}
que en realidad no funciona, porque cuando el serializador intenta serializar el objeto de cliente, en realidad se trata de la versión proxy de EF, que causa es hipo. Ver Can an ApiController return an object with a collection of other objects?
Por lo tanto, podría desactivar la generación de proxy al hacer esto a mi DbContext
:
db.Configuration.ProxyCreationEnabled = false;
que asegura que estoy tratando con la POCO lugar de un proxy. Pero ahora la mayoría de los miembros de mi clase de Cliente no están ocupados, ya que fue el proxy de EF el que me cargó lazy.
Entonces, lo que realmente quiero es usar la clase de proxy de EF para obtener los datos, y luego en el último minuto devolver el POCO original de mi método.
¿Cómo puedo hacer eso sin crear manualmente el objeto completo desde cero (incluidos los objetos anidados) en el código? Seguramente debe haber una manera fácil, o al menos una clase de ayuda de algún tipo.
+1 exponer dtos al cliente remoto es el mejor camino a seguir. Le da un control total sobre los datos enviados a través del cable. –
Gracias, verifico AutoMapper - suena como la clase de "ayudante de algún tipo" que estaba buscando. –