Entity Framework en database calls
Ik wilde wel eens weten wanneer het Entity Framework de database ingaat voor het voeren van requests. Deze vraag had ik al snel beantwoord toen ik op een site van Microsoft terechtkwam. Hier wordt namelijk het volgende gesteld:
Bij het uitvoeren van requests maakt het EF gebruik van 'normale' SQL statements en van de systeem SP ep_executesql. Van de laatstgenoemde maakt EF gebruik indien parameters gemoeid zijn met de query. Als er geen parameters van toepassing zijn wordt een 'normale' SQL query uitgevoerd. Voorbeeld:
Het aanroepen van de volgende methodes zorgt ervoor dat er een database verbinding wordt geopendDit is terug te lezen op: http://msdn.microsoft.com/en-us/library/bb738582.aspx.
- als SaveChanges of Refresh wordt aangeroepen op de ObjectContext
- als FirstOrDefault of First wordt aangeroepen op de ObjectContext
- als Load wordt aangeroepen op de EntityCollection
- als Load wordt aangeroepen op de EntityReference
- als een LINQ of ObjectQuery method wordt aangeroepen zoals bijv. Where, OrderBy of Select.
Bij het uitvoeren van requests maakt het EF gebruik van 'normale' SQL statements en van de systeem SP ep_executesql. Van de laatstgenoemde maakt EF gebruik indien parameters gemoeid zijn met de query. Als er geen parameters van toepassing zijn wordt een 'normale' SQL query uitgevoerd. Voorbeeld:
Onderstaande LINQ query maakt geen gebruik van de sp_executesql SP.
==============================================================
var cust = from c in ctx.Customers
where c.CustomerID == "ALFKI"
select c;
where c.CustomerID == "ALFKI"
select c;
==============================================================
Deze query maakt wel gebruik van de sp_executesql SP.
==============================================================
string CustID = "ALFKI";
var cust = from c in ctx.Customers
where c.CustomerID == CustID
select c;
var cust = from c in ctx.Customers
where c.CustomerID == CustID
select c;
==============================================================
De sp_executesql SP wordt gebruikt omdat dit de enige manier is om dynamisch geparameteriseerde query's uit te voeren in SQL Server.
Reacties
Een reactie posten