2012-03-05 32 views
8

Estoy investigando el nuevo marco ASP.NET MVC4 Web API framework. Estoy ejecutando beta de Visual Studio 2011 en la vista previa de consumidor de Windows 8.Cómo mezclar Entity Framework con Web API

Mi problema es que ninguna de las muestras oficiales para el nuevo marco de Web API utiliza ningún tipo de back-end de base de datos. En el pasado, pude crear una base de datos SQL CE local y publicarla a través de un Servicio de datos WCF utilizando Entity Framework como ORM. ¿Cómo hago lo mismo con la API web?

Además, ¿es esta una pregunta válida? ¿Debo seguir usando un WCF Data Service si quiero exponer una base de datos SQL CE mapeada de Entity Framework? Parece funcionar bien, aparte de no ofrecer la flexibilidad de elegir los formateadores de respuesta que pueda obtener con la API web.

Respuesta

4

Si nos fijamos en la Contact Manager sample oficial, encontrará que el modelo de repositorio se usa para acceder a la capa de datos Además, tenga en cuenta que en este ejemplo particular también hay DI a través de Ninject.

En mi caso, he enchufado esto fácilmente en un modelo EF ya existente.

He aquí un ejemplo de una implementación repositorio

///MODEL 
public class SampleRepository : ISampleRepository 
{ 

    public IQueryable<Users> GetAll() 
    { 
     SampleContext db = new SampleContext(); 
     return db.users; 
    } 

    [...] 
} 

///CONTROLLER 
private readonly ISampleRepository repository; 

public SampleController(ISampleRepository repository) 
{ 
    this.repository = repository; 
} 

//GET /data 
public class SampleController : ApiController 
{ 
    public IEnumerable<DataDTO> Get() 
    { 
     var result = repository.GetAll(); 

     if (result.Count > 0) 
     { 
      return result; 
     } 


     var response = new HttpResponseMessage(HttpStatusCode.NotFound); 
     response.Content = new StringContent("Unable to find any result to match your query"); 
     throw new HttpResponseException(response); 
    } 
} 

su experiencia puede variar sin embargo, y es posible que desee resumen algunos de esta información aún más. Una buena noticia es que hay muchos patrones e ideas que ya puede haber usado en proyectos basados ​​en MVC are still valid.

+3

No está mal, pero no me molestaría en crear un repositorio en este caso. Entity Framework, especialmente las versiones más nuevas, ya están usando el patrón de repositorio. El contenedor no hace nada diferente además de agregar complejidad. – ShadowChaser

+0

Tengo la misma configuración que su código anterior: agrego nuevos registros a través de la aplicación MVC normal y luego intento recuperarlos con la API web utilizando el mismo repositorio. Sin embargo, la API web no devolverá los registros recién agregados, solo los que agregué inicialmente con el método Seed en la aplicación principal. ¿Alguna idea de por qué es esto o cómo puedo obtener la API web para devolver los registros recién agregados? –

+0

Ciaran, parece que podría tener cadenas de conexión que apuntan a diferentes recursos, es decir, SQL compacto frente a servidor SQL. O que podría estar recreando completamente la base de datos con cada ejecución. Pero no tengo mucho con lo que trabajar aquí. Su consulta probablemente justifique una pregunta completamente nueva con un ejemplo aislado. – JSancho

2

No he trabajado con WCF Web API, por lo que puedo decir con certeza si puede usarlo de la misma manera que lo hizo con WCF Web API, pero estoy seguro de que puede usar EF con ASP.NET Web API . Le sugiero que eche un vistazo a cómo ASP.NET MVC makes use of EF, debería ser muy similar a cómo lo usaría con ASP.NET Web API.

En cuanto a la otra pregunta, si usted está planeando un nuevo desarrollo debe considerar el uso de la API Web ASP.NET ya que no hay un anuncio en wcf.codeplex.com diciendo:

API Web WCF es ahora la API Web ASP.NET ! API web ASP.NET lanzada con ASP.NET MVC 4 Beta. La API de Web WCF WCF y soporte para el contenido jQuery en este sitio serán eliminados a finales de 2012.