LINQ sta codificando tutte le query nell'applicazione? Si assolutamente.
Consideriamo cosa significa per la vostra applicazione.
Se si desidera modificare il modo in cui si ottengono alcuni dati, è necessario apportare una modifica al codice compilato; non puoi fare un "hotfix" al tuo database.
Tuttavia, se si modifica una query a causa di una modifica nel modello di dati, è probabile che si debba modificare il modello di dominio per adattarlo alla modifica.
Supponiamo che il modello non sia stato modificato e che la query stia cambiando perché è necessario fornire ulteriori informazioni alla query per ottenere il risultato corretto. Questo tipo di modifica richiede sicuramente la modifica dell'applicazione per consentire l'utilizzo del nuovo parametro per aggiungere ulteriori filtri alla query.
Ancora una volta, supponiamo che tu sia felice di utilizzare un valore predefinito per il nuovo parametro e che l'applicazione non debba specificarlo. La query potrebbe includere un campo come parte del risultato. Non devi tuttavia utilizzare questo campo aggiuntivo e puoi ignorare le informazioni aggiuntive inviate via cavo. Qui è stato introdotto un po 'di problemi di manutenzione, in quanto l'SQL non è in linea con l'interpretazione della sua applicazione.
In questo scenario specifico in cui non si sta apportando una modifica esterna alla query o l'applicazione ignora le modifiche, si ottiene la possibilità di distribuire le modifiche solo SQL senza dover toccare l'applicazione o abbattilo per un po 'di tempo (o se ti piacciono i desktop, distribuisci una nuova versione).
Realisticamente, quando si tratta di fare modifiche a un sistema, la maggior parte del vostro tempo sta per essere speso progettare e testare le vostre domande, non distribuirli (e se non lo è, allora si Sei in un posto spaventoso). Il vantaggio di avere una query in LINQ è quanto è più facile scriverli e testarli separatamente da altri fattori, come test unitari o parte di altri processi.
L'unico motivo reale per utilizzare stored procedure su LINQ è se si desidera condividere il database tra diversi sistemi utilizzando un'API coerente a livello di SQL. È una situazione piuttosto orribile e preferirei sviluppare un livello di servizio sopra il database SQL per uscire da questo progetto.
fonte
2012-01-16 12:54:39
La seconda query non è una 'stored procedure'. La stored procedure verrà scritta all'interno del tuo database e il codice Entity lo chiamerà semplicemente. Invece di scrivere la frase select, scrivi il nome della stored procedure –
Sono consapevole che non è una stored procedure. Sto cercando di far notare che se faccio una query LINQ su un contesto di entità, sembra esattamente la stessa cosa se ho appena codificato la query SQL nel codice. – jermny
Mi sono sempre chiesto questo. Sarebbe interessato a vedere la risposta! –