Una delle funzionalità più controverse di Entity Framework è la modalità con cui viene parsata la Contains per trasformarla in una IN sql. Fino alla versione 8, Entity Framework ha tradotto in SQL inserendo nella stringa direttamente i valori passati in input.
int[] ids = [1, 2, 3]; var people = await context.People.Where(b => ids.Contains(b.Id)).ToListAsync();
select * from People where Id in (1, 2, 3)
A partire dalla versione 8 si è optato per una nuova modalità dove i valori vengono serializzati in json e passati come parametro alla query generando il seguente sql.
select * from People where Id IN (
select value
from OPENJSON(@ids) WITH (value int '$'))A partire dalla versione 10 è stata introdotta una nuova modalità mista che sarà il nuovo default: i valori vengono inseriti come parametri nella clausola in.
select * from People where Id IN (@p1, @p2, @p3)
Tutte e tre le strategie sono disponibili in EF e sta a noi scegliere quale usare. Nel prossimo script vedremo come effettuare la scelta.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.




