Miglioramenti alla Contains in Entity Framework 10

di Stefano Mostarda, in Linq, Entity Framework,

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

Visualizza/aggiungi commenti

| Condividi su: LinkedIn, Facebook

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi