Stored Procedure in Entity Framework 4.1

Scritto da  Pietro Libro il martedì 3 maggio 2011  •  Linguaggio: C#,VB   • Livello: 100


Secondo delle necessità, abbiamo acluni workaround per eseguire una Stored Procedure (SP) con la nuova versione di Entity Framework. Possiamo utilizzare il metodo SqlQuery esposto dalla proprietà Database, a sua volta presente nella classe derivante dal DbContext, SqlQuery esposto da DbSet<>, rappresentate una collezione di entità, o utilizzare il metodo ExceuteSqlCommand presente nella classe Database. Nel primo caso, supponendodi avere una entità "Persona", potremmo scrivere qualcosa del tipo:

C#

db.Database.SqlQuery<Persona>("EXECUTE LoadPersonaByName @Param1",
                                new SqlParameter("Param1", "Pietro"));

 

VB.NET

db.Database.SqlQuery(Of Persona)("EXECUTE LoadPersonaByName @Param1", _
                                 New SqlParameter("Param1", "Pietro"))

 

dove SqlQuery<...> restituisce un IEnumerable del tipo generico specificato. Oppure potremmo scrivere:

C#

db.Persone.SqlQuery("EXECUTE LoadPersonaByName @Param1",
                    new SqlParameter("Param1", "Pietro"));

 

VB.NET

db.Persone.SqlQuery("EXECUTE LoadPersonaByName @Param1", _
                    New SqlParameter("Param1", "Pietro"))

 

Ottenendo ancora un IEnumerable di "Persona", ma con una sostanziale differenza: nel primo caso i risultati restituiti non sono "tracciati" dal contesto corrente e di conseguenza eventuali modifiche alle entità non sarebbero prese in considerazione, nel secondo caso sì. Il terzo metodo citato per l'esecuzione di SP è l'utilizzo di ExecuteSqlCommand:

C#

db.Database.ExecuteSqlCommand("EXECUTE DeletePersonaByName @Param1",
                                new SqlParameter("Param1", "Pietro"));

 

VB.NET

db.Database.ExecuteSqlCommand("EXECUTE DeletePersonaByName @Param1", _
                                New SqlParameter("Param1", "Pietro"))

 

in questo caso, il valore di ritorno è un intero. Attenzione: affinchè una SP possa essere mappata su di un'entità, come nei primi due casi, è necessario utilizzare la keyword 'as' nella definizione dello statement SQL per mappare i nomi di colonna con i nomi delle proprietà dell'entità.


Tags: Entity Framework 4.1,Stored Procedure

 
x