2012-03-05 2 views
8

Sto cercando il nuovo framework API Web ASP.NET MVC4. Sto eseguendo Visual Studio 2011 beta nell'anteprima consumer di Windows 8.Come mixare Entity Framework con Web API

Il mio problema è che nessuno dei campioni ufficiali per il nuovo framework API Web utilizza alcun tipo di back-end del database. In passato, sono stato in grado di creare un database SQL CE locale e di servirlo tramite un servizio dati WCF utilizzando Entity Framework come ORM. Come faccio a fare lo stesso con l'API Web?

Inoltre, questa è una domanda valida? Devo semplicemente continuare a utilizzare un servizio dati WCF se voglio esporre un database SQL CE mappato su Entity Framework? Sembra funzionare bene, oltre a non offrire la flessibilità di scegliere i formattori di risposta che potrei ottenere con la web API.

risposta

4

Se si guarda il funzionario Contact Manager sample, troverete che il Pattern Repository viene utilizzato per accedere al livello dati. Inoltre, tenete presente che in questo particolare esempio c'è anche DI via Ninject.

Nel mio caso l'ho facilmente collegato a un modello EF già esistente.

Ecco un esempio di implementazione repository

///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); 
    } 
} 

tua situazione potrebbe essere diversa, però, e si potrebbe desiderare di astrarre alcuni dei dati di questo accesso ancora di più. Le buone notizie sono un sacco di schemi e idee che potresti aver già utilizzato su progetti basati su MVC are still valid.

+3

Non male, ma in questo caso non mi preoccuperei di creare un repository. Entity Framework, specialmente le versioni più recenti, stanno già utilizzando il modello di repository. Il wrapper non fa nulla di diverso da aggiungere complessità. – ShadowChaser

+0

Ho più o meno la stessa configurazione del codice sopra - aggiungo nuovi record tramite la normale app MVC e poi cerco di recuperarli con l'API Web utilizzando lo stesso repository. Tuttavia, la web api non restituirà i record appena aggiunti, solo quelli che inizialmente aggiungo con il metodo Seed nell'app principale. Qualche idea sul perché questo è, o come posso ottenere l'API web per restituire i record appena aggiunti? –

+0

Ciaran, sembra che tu abbia o meno stringhe di connessione che puntano a risorse diverse, come il server SQL compatto e quello SQL. O si potrebbe ricreare completamente il database ad ogni esecuzione. Ma non ho molto da lavorare qui. La tua query probabilmente garantisce un'intera nuova domanda con un esempio isolato. – JSancho

2

Non ho lavorato con l'API Web WCF, quindi posso dire con certezza se è possibile utilizzarlo come con l'API Web WCF, ma sono sicuro che è possibile utilizzare EF con l'API Web ASP.NET . Ti suggerisco di dare un'occhiata a come ASP.NET MVC makes use of EF, dovrebbe essere molto simile a come lo useresti con l'API Web ASP.NET.

Per quanto riguarda altre questioni, se avete in programma qualche nuovo sviluppo si dovrebbe considerare l'utilizzo di ASP.NET Web API dato che non c'è un annuncio sul wcf.codeplex.com dicendo:

WCF Web API è ora ASP.NET Web API ! API Web ASP.NET rilasciata con ASP.NET MVC 4 Beta. L'API Web WCF e Supporto WCF per i contenuti jQuery su questo sito saranno rimossi entro la fine del 2012.