Ho bisogno di capire questo. C'è una grande differenza tra EF5.0 e EF6 * in TSQL di generazione di codiceEntityFramework LINQToEntities generano uno strano lento TSQL Where-Clause
Nel mio codice questo è il mio LINQ -. Statemant
var qry2 = context.viw_overview_1.Where(i => i.article_EAN17 == ean).Select(i => i.article_id).Take(200);
EntityFramework 5,0 generano solo un TSQL semplice e veloce DOVE - dichiarazione come questa, che è perfetto
... WHERE [Extent1].[article_EAN17] = @p__linq__0
00.0960096ms in SSMS
ma EntityFramework 6. * generare una dichiarazione molto più complesso e lento
... WHERE (([Extent1].[article_EAN17] = @p__linq__0) AND (NOT ([Extent1].[article_EAN17] IS NULL OR @p__linq__0 IS NULL))) OR (([Extent1].[article_EAN17] IS NULL) AND (@p__linq__0 IS NULL))
45.3665362ms in SSMS
il campo articolo_EAN17 ha anche un indice. tuttavia EF6. * Impiega comunque l'età per inizializzarsi, MA c'è un modo per generare una semplice istruzione WHERE in EF6. * Con attributi o qualcosa del genere? Ho provato string.Equals(), string.Compare(), scambiando il parametro, ma non è cambiato nulla.
Why does Entity Framework 6 generate complex SQL queries for simple lookups? spiegare la differenza, Ma c'è un modo per forzare EF a generare TSQL semplice.
Dubito che il cambiamento T-SQL stia rallentando. Hai provato entrambe le query sullo stesso set di dati? – haim770
Solo curioso: hai schiaffeggiato le due dichiarazioni in SSMS e confrontato le loro prestazioni? –
il semplice confronto di EF5 è 5 volte più veloce di EF6 in C# e molto più veloce in SSMS – Roland