Condividi tramite


Esecuzione diretta dei comandi di archiviazione

In Entity Framework è possibile eseguire direttamente comandi arbitrari sull'origine dati.

Il comando di archiviazione viene eseguito nel contesto della transazione corrente, se tale transazione esiste. Se la connessione tramite l'oggetto ObjectContext non viene aperta prima della chiamata a uno dei metodi riportati di seguito, Entity Framework ne consentirà l'apertura prima dell'esecuzione della query e quindi la chiusura al termine di tale esecuzione. Per informazioni sull'esecuzione delle query, vedere Query di oggetto (Entity Framework). I metodi seguenti appartengono al tipo ObjectContext. Per esempi di utilizzo dei metodi, vedere Procedura: eseguire direttamente i comandi sull'origine dati.. I metodi sono:

Materializzazione del tipo di risultato

Per i metodi precedenti in cui viene accettato un parametro del tipo di risultato generico, l'oggetto TResult può essere un tipo primitivo, un tipo di entità o un qualsiasi tipo personalizzato. Il tipo non deve essere definito nel modello concettuale Entity Framework . Se il tipo specificato è di un tipo non definito nel modello concettuale o non è un tipo primitivo, vengono applicate le seguenti convenzioni di mapping.

Tipo:

  • Non deve essere astratto.

  • Deve disporre di un costruttore predefinito.

Ogni proprietà del tipo:

  • Deve disporre di un metodo Set.

  • Deve corrispondere a un tipo primitivo in CSDL.

  • Deve corrispondere a un nome di colonna nell'oggetto DbDataReader risultante l'implementazione del provider determina se una colonna presenta lo stesso nome della proprietà). Se il nome della proprietà del tipo non corrisponde a un campo dell'oggetto DbDataReader, Entity Framework consente di materializzare il valore predefinito della proprietà se è definito nel modello concettuale.

Utilizzo di comandi con parametri

I comandi con parametri consentono di salvaguardarsi da attacchi SQL di tipo injection, ovvero attacchi in cui un comando viene inserito in un'istruzione SQL compromettendo la sicurezza del server. A tale scopo, i comandi con parametri garantiscono che i valori ricevuti da un'origine esterna verranno passati come semplici valori e non come parte dell'istruzione SQL. I comandi SQLinseriti in un valore non verranno pertanto eseguiti sull'origine dati. Verranno invece valutati solo come un valore del parametro. Oltre ai vantaggi in termini di sicurezza, i comandi con parametri rappresentano un metodo pratico per organizzare i valori passati con un'istruzione SQLo a una stored procedure.

Quando si chiama il metodo ExecuteStoreCommand o uno degli overload ExecuteQuery (ExecuteStoreQuery o ExecuteStoreQuery) e si passano gli argomenti commandText e parameters, Entity Framework genera una nuova istanza di DbCommand tramite la connessione del contesto dell'oggetto corrente e imposta la proprietà CommandText ** su commandText e la proprietà Parameters su parameters. Il valore parameters può essere una matrice di oggetti DbParameter o una matrice di valori dei parametri. Se vengono forniti solo i valori, una matrice di oggetti DbParameter viene creata in base all'ordine dei valori nella matrice. Mediante il provider sottostante viene determinata la proprietà DbType appropriata per l'oggetto Parameter, basata sul tipo Common Language Runtime (CLR). La proprietà ParameterName per ogni oggetto Parameter viene compilata utilizzando il modello seguente: "pn" dove n è l'ordinale in base zero dell'argomento del parametro.

Ad esempio, le due chiamate al metodo seguenti sono equivalenti:

context.ExecuteStoreQuery<Product>("select * from Products where pid = {0}", 1);

context.ExecuteStoreQuery<Product>("select * from Products where pid = @p0", new SqlParameter { ParameterName = "p0", Value = 1 });

Vedere anche

Attività

Procedura: eseguire direttamente i comandi sull'origine dati.