Ottenere SQLCOMMAND con EF
-
12-12-2019 - |
Domanda
Ho fatto un servizio SQLDependency nella mia applicazione.Funziona perfettamente quando digito le query a mano, ma non posso includere i caratteri jolly (non so davvero perché).
Ad esempio:
//Using this SqlCommand will work
new SqlCommand("SELECT [employees].[name] FROM [dbo].[employees]", sqlNotificationConn)
//But this one won't
new SqlCommand("SELECT [employees].* FROM [dbo].[employees]", sqlNotificationConn)
//And this one won't either
new SqlCommand("SELECT * FROM [dbo].[employees]", sqlNotificationConn)
.
Così fondamentalmente, voglio ottenere il mio dbContext per generare un comando select completo con tutti i campi con cui si tratta.
In Linq 2 SQL, ho utilizzato questo servizio utilizzando dbContext.GetCommand(.....);
in EF 4.0 (o è stato 4.1?), Ho usato dbContext.employee.ToTraceString();
Ma in EF 4.4, non riesco a trovare nulla per generare quella selezione della stringa di query ....
Soluzione
con DbContext
(DbQuery
) È semplice come:
query.ToString()
.
con ObjectContext
(ObjectQuery
):
((ObjectQuery)query).ToTraceString()
.
A proposito, query
può essere qualsiasi espressione basata su un DbSet
(o ObjectSet
, rispettivamente).Quindi qualcosa come dbContext.employee.Where(e => e.Name == "Gates").ToString()
mostrerà anche la query SQL generata.
A linq Dichiarazione che costringe l'esecuzione, come ToList()
, Single()
, FirstOrDefault()
, ecc., Crea un nuovo oggetto e ToString()
restituire il nome del tipo dell'oggetto.
Altri suggerimenti
ToTraceString()
è ancora in EF, lo stesso posto è sempre stato.Tuttavia, è su ObjectQuery
, non DbQuery
.Detto questo, non ho mai visto il fornitore di SQL Server per EF utilizza *
;Utilizza sempre campi discreti in SQL.