2009-02-27 11 views
19

Ho appena iniziato a utilizzare LINQ su SQL in un progetto di medie dimensioni e vorrei approfondire la mia comprensione dei vantaggi offerti da L2S.Quali sono i vantaggi di LINQ su SQL?

Uno svantaggio che vedo è che aggiunge un altro livello di codice, e la mia comprensione è che ha prestazioni più lente rispetto all'utilizzo di stored procedure e ADO.Net. Sembra inoltre che il debug potrebbe essere una sfida, soprattutto per le query più complesse, e che queste potrebbero finire per essere trasferite a un processo memorizzato comunque.

Ho sempre desiderato un modo per scrivere le query in un ambiente di sviluppo migliore, L2S interroga la soluzione che stavo cercando? O abbiamo appena creato un altro livello sopra SQL, e ora abbiamo il doppio di cui preoccuparci?

+0

Penso che chiariresti le cose se hai cambiato la domanda per dire "LINQ to SQL" ovunque. C'è un sacco di LINQ oltre LINQ a SQL. –

+0

buon punto, grazie. – alchemical

risposta

41

Vantaggi L2S offerte:

  • No Strings magia, come avete in SQL query
  • Intellisense
  • Compile verificare quando il database cambia sviluppo
  • veloce
  • Unità di modello di lavoro (contesto)
  • Oggetti dominio generati automaticamente che sono utilizzabili piccoli progetti
  • Caricamento lento.
  • Imparare a scrivere query linq/lambdas è un must per gli sviluppatori .NET.

quanto riguarda le prestazioni:

  • Molto probabilmente la performance non sta per essere un problema nella maggior parte delle soluzioni. Pre-ottimizzare è un anti-pattern. Se in seguito si nota che alcune aree dell'applicazione rallentano, è possibile analizzare queste parti e in alcuni casi anche scambiare alcune query linq con stored procedure o ADO.NET.
  • In molti casi la funzione di caricamento lento può velocizzare le prestazioni, o almeno semplificare molto il codice.

Per quanto riguarda debuging:

  • A mio parere debuging Linq2Sql è molto più facile che sia stored procedure e ADO.NET. Ti consiglio di dare un'occhiata a Linq2Sql Debug Visualizer, che ti permette di vedere la query, e persino di attivare un execute per vedere il risultato durante il debug.
  • È anche possibile configurare il contesto di scrivere tutte le query SQL per la finestra della console, ulteriori informazioni here

Per quanto riguarda un altro livello:

  • Linq2Sql può essere visto come un altro strato, ma è è un livello puramente di accesso ai dati. Le stored procedure sono anche un altro livello di codice e ho visto molti casi in cui parte della logica aziendale è stata implementata in stored procedure. Questo è molto peggio, secondo me, perché dividi il livello aziendale in due punti e sarà più difficile per gli sviluppatori avere una visione chiara del dominio aziendale.
+0

+1 risposta molto bella Mi piace, Grazie. –

+1

bella esaltazione – AjayR

1

Devo dire che sono ciò che stavate cercando. Ci vuole del tempo per abituarcisi, ma una volta fatto non puoi pensare di tornare indietro (almeno per me). Per quanto riguarda le procedure linq e memorizzate, si può avere scarso rendimento se si crea un errore. Mi sono spostato su linq per eseguire lo sql di alcune stored procedure di un client che erano state codificate in modo errato, quindi il tempo sceso da 20 sec. (Totalmente non ottimizzato per un'app Web) a < 1 secondo. E molto meno codice quindi la soluzione di stored procedure.

Aggiornamento 1: Inoltre si ottiene molta flessibilità, in quanto è possibile limitare le colonne di ciò che si sta ottenendo e in realtà lo recupererà. Sulla soluzione di stored procedure è necessario definire una procedura per ogni set di colonne che si sta ottenendo, anche se le query sottostanti sono le stesse.

0

Abbiamo passato a LINQ2Entity di recente nell'ambiente Entity Framework. Prima, avevamo gli SQLadapters di base. Poiché il database con cui stiamo lavorando è piuttosto piccolo, non posso commentare le prestazioni di LINQ.

Devo ammettere che, tuttavia, le query di scrittura sono diventate molto più semplici e l'aggiunta di entità consente una digitazione forte.

+0

Johannes, non penso che la tipizzazione forte sia un argomento per linq2entity rispetto a linq2sql, in quanto ha anche una forte digitazione :) ... Sono sicuro che ce ne sono alcuni buoni, mi limito a confrontare linq2sql vs ado.net – eglasius

14

Solo pochi pensieri.

LINQ in generale

  • query in memoria collezioni e out-of-process archivi di dati con la stessa sintassi e gli operatori
  • Uno stile dichiarativo funziona molto bene per le query - è più facile sia leggere e scrivere in moltissimi casi
  • integrazione linguistica Neat permette nuovi fornitori (sia dentro che fuori del processo) da scrivere e sfruttare la sintassi delle espressioni stessa query

LINQ to SQL (o di altri database LINQ)

  • query di scrittura dove è necessario, piuttosto che come stored procedure rende lo sviluppo molto più veloce: ci sono molti meno passaggi necessari solo per ottenere i dati che si desidera
  • Un numero inferiore di stringhe (stored proc, nomi di parametri o semplicemente SQL) implicate in cui i refusi possono essere irritanti; l'altro lato di questa medaglia è che ottieni Intellisense per la tua query
  • A meno che non lavorerai con i dati "grezzi" di ADO.NET, avrai comunque un modello di oggetto da qualche parte. Perché non lasciare che LINQ to SQL lo gestisca per te? Mi piace piuttosto essere in grado di eseguire una query e recuperare gli oggetti, pronti per l'uso.
  • Mi aspetto che le prestazioni siano soddisfacenti e, in caso contrario, è possibile ottimizzarle o ricorrere all'analisi SQL. L'utilizzo di un ORM non elimina la necessità di creare gli indici corretti, ecc. E di solito si dovrebbe verificare l'SQL generato per le query non banali.

Non è una panacea in alcun modo, ma lo preferisco di gran lunga facendo query SQL direttamente o utilizzando stored procedure.

+0

Sia John che Bengt dicono quasi la stessa cosa, entrambi con dettagli eccellenti! –

+0

Probabilmente è meglio implementare la logica di business in DB SP (in modo da utilizzare le funzionalità di DB per la sicurezza e l'analisi delle prestazioni) e utilizzare LINQ solo per ridurre la codifica durante il riempimento di oggetti con i dati acquisiti da SP. – Faiz

+1

@Faiz: D'altra parte, la logica aziendale è in genere notevolmente * più semplice * da implementare in C# rispetto a SQL e se si dispone di una sola via di accesso ai dati (ad esempio, un servizio Web a più livelli di fronte al database) allora puoi ottenere il meglio da entrambi i mondi. –

Problemi correlati