Estoy usando Entity Framework Core 6. Básicamente, la última versión hasta la fecha y veo una diferencia significativa en el rendimiento de estos 2 bloques de código:
var items = await context.Items.Where(...).ToListAsync();Y:
var sql = context.Items.Where(...).ToQueryString(); var items = await context.Items.FromSqlRaw(sql).ToListAsync();Como usuario, me imagino que el primer bloque de código se convierte en el segundo dentro de la biblioteca, pero aparentemente sucede algo más detrás de escena. La consulta resultante tiene que ser la misma que todas las condiciones y todo es idéntico. Sin embargo, el bloque n. ° 1 falla con el tiempo de espera y el bloque n. ° 2 se ejecuta súper rápido y obtengo resultados de inmediato.
¿Qué está sucediendo?
ACTUALIZAR 1.
Mi .Where(...) se ve así:
.Where(ro => ro.AccountId == accountId && ( ro.CustomerEmail == query.Email || ro.CustomerEmail1 == query.Email || ro.CustomerEmail2 == query.Email ))ACTUALIZAR 2.
Este es el SQL que obtengo de la llamada ToQueryString() lo formateé para facilitar la lectura):
DECLARE @__account_AccountId_0 nvarchar(200) = N'12345678'; DECLARE @__email_1 nvarchar(200) = N'test@gmail.com'; SELECT [r].* -- all fields FROM [MyTable] AS [r] WHERE ([r].[AccountId] = @__account_AccountId_0) AND ( (([r].[CustomerEmail] = @__email_1) OR ([r].[CustomerEmail1] = @__email_1)) OR ([r].[CustomerEmail2] = @__email_1))