Scegliere la strategia di traduzione della Contains in Entity Framework 10

di Stefano Mostarda, in LINQ, Entity Framework,

Nello script 683 abbiamo visto che Entity Framework 10 introduce un ulteriore modo di tradurre il metodo Contains in una IN SQL. La strategia di default è quella di usare i singoli parametri nella IN, ma questa strategia può non andare bene per i nostri scopi e magari vogliamo usarne un'altra. Possiamo configurare la nostra strategia di efault durante la fase di configurazione del contesto.

optionsBuilder
    .UseSqlServer(connString, o => o.UseParameterizedCollectionMode(ParameterTranslationMode.Constant));

L'enum ParameterTranslationMode ha tre possibili valori:

  • MultipleParameters: usa i singoli parametri nella in "select * from table where id in (@p1, @p2, @p3)". Questo è il valore di default;
  • Constant: usa i valori costanti nella in "select * from table where id in (1, 2, 3)";
  • Parameter: serializza i valori in json "select * from table where id in "select value from OPENJSON(@ids) WITH (value int '$')".

Possiamo anche decidere di addottare una specifica strategia per una singola query usando i metodi della classe statica EF.

  • Constant: usa i valori costanti nella in "select * from table where id in (1, 2, 3)";
  • Parameter: serializza i valori in json "select * from table where id in "select value from OPENJSON(@ids) WITH (value int '$')".

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