Stored Procedure in Entity Framework 4.1
Scritto da
Pietro Libro il
martedì 3 maggio 2011
•
Linguaggio:
• 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