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:
Het aanroepen van de volgende methodes zorgt ervoor dat er een database verbinding wordt geopend
  • 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.
Dit is terug te lezen op: http://msdn.microsoft.com/en-us/library/bb738582.aspx.

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;
==============================================================
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;
==============================================================

De sp_executesql SP wordt gebruikt omdat dit de enige manier is om dynamisch geparameteriseerde query's uit te voeren in SQL Server.

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren