2010-10-28 19 views
10

Come dice il titolo, come posso visualizzare l'SQL generato da Entity Framework dal mio codice? Mi sto imbattendo in un errore in cui l'EF si blocca perché un campo è generato dal database (un campo DateTime), e ho pensato di impostarlo per sapere che il negozio lo sta generando tramite StoreGeneratedPattern, ma è ancora in crash, quindi vorrebbe vedere cosa esattamente sta cercando di spingere fino al database.Come visualizzare SQL generato da Entity Framework?

P.S. Sto solo usando EF da circa un'ora ora ... Passando da L2S.

risposta

16

Poiché non si dispone di Sql Profiler, la scelta migliore sarebbe LINQPad. È possibile utilizzare l'assemblaggio esistente.

Fare clic su Add connection ->Use a typed data context from your own assembly ->Entity framework e selezionare la DLL.

È possibile scrivere query direttamente sul modello (o copia-incolla dal codice). Selezionare la "scheda" SQL nella finestra di query per visualizzare il codice SQL generato.

+0

Nel contesto della mia domanda, hai la soluzione migliore. Esso funziona magicamente. Grazie! – Gup3rSuR4c

+0

Grazie! Questa è la migliore soluzione gratuita e semplice. – Funbit

2

Una soluzione potrebbe essere quella di acquisire il traffico di rete e dare un'occhiata ai dati di quel livello. Microsoft Network Monitor fa un buon lavoro.

Ovviamente, funziona solo se si utilizza un server DB separato e la connessione non è crittografata.

3

In generale, è necessario utilizzare sempre SQL Profiler per vedere le istruzioni SQL che non possa essere presentata da EF nel database.

Inoltre, penso che tu abbia frainteso ciò che è StoreGeneratedPattern. Se osservi i possibili valori all'interno del modello, vedrai che ha identità che significa che il valore verrà generato (dal database) quando la riga viene inserita e non cambierà altrimenti. Le altre opzioni sono Computerizzata, che specifica che il valore verrà generato inserimenti e aggiornamenti, e Nessuno, che è il default.
Quindi EF non genererà quel campo DateTime al volo, sarà necessario crearlo manualmente e quindi aggiornare il modello dal database in modo che EF generi i metadati appropriati per utilizzarlo in fase di runtime.

+0

Non ho installato il profiler e non riesco a vederlo come una funzionalità che posso aggiungere quando rieseguo l'installazione, quindi, purtroppo, questo è un vicolo cieco. Per quanto riguarda "StoreGeneratedPatern", sono abbastanza sicuro di averlo capito correttamente quando ho letto su MSDN. A meno che * Identity * sia inteso solo per le colonne PK e nient'altro? – Gup3rSuR4c

+0

In entrambi i casi, come posso superare il problema del blocco EF dei valori generati dal database? – Gup3rSuR4c

+0

Ok, per prima cosa devi parlarmi del tuo approccio: hai un database esistente e stai creando un modello basato su di esso o stai seguendo un approccio model-first? –

5

È possibile utilizzare Entity Framework Profiler (EFProf). Non è gratuito, ma è disponibile una versione di prova di 30 giorni. Fa molto più roba oltre a mostrarti le istruzioni SQL.

+1

Perché il downvote? –

+0

È uno strumento utile, tranne che devi effettivamente modificare il codice e aggiungere un riferimento per lo strumento per funzionare correttamente. – Chris

3

Il software gratuito AnjLab Sql Profiler funziona se SQL Profiler non è disponibile perché si utilizza SQL Server Express: http://anjlab.com/en/projects/opensource/sqlprofiler. Non è bello come il vero, ma fa il lavoro abbastanza bene.

+0

Non è più possibile trovare, è stato commercializzato. – Nenotlep

Problemi correlati