Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model...

Preview:

Citation preview

Développement d’application avec base de donnéesSemaine 2: Requête avec l’Entity Data Model

Automne 2013

Méthodes pour faire des requêtes Premier exemple de requêtes…mais plus de

questions que de réponses…

Plan de présentation

Plusieurs méthodes disponibles pour faire des requêtes. Le choix va reposer sur un choix personnelle plus que sur une question de performance.

Méthodes utilisées Linq To Entities ObjectQuery Parcourir une collection Etc.

Méthodes pour faire des requêtes

Query the Model, Not the Database Laissons ce travail à ADO.NET et son provider.

Méthodes pour faire des requêtes

Première requête -> Parcourir une collection

En fait! Var contacts = context.Contacts; c’est

ObjectSet<Contact> contacts = context.Contacts;

Type

Les classes suivantes sont générés automatiquement.

Mais d’où viennent ces classes

Les propriétés de navigation nous permettent d’interroger les entités associés.

Les propriétés de navigation

Linqvar contacts = from c in context.Contactswhere c.FirstName == "Robert"select c; lambda :var contacts = context.Contacts.Where((c) => c.FirstName == "Robert").OrderBy((foo) => foo.LastName);

Qui dit collection dit Linq/Lambda

Pourquoi le la clause FROM est au début contrairement au SQL?

Question de culture!

Ici, les propriétés de navigation nous simplifie vraiment la vie:

from a in context.Addresseswhere a.Contact.AddDate > new System.DateTime(2009, 1, 1)orderby a.Contact.LastNameselect new {a, a.Contact.LastName};

Propriété de navigation avec Linq

Entity Framework’s Object Services qStr = "SELECT VALUE c FROM SampleEntities.Contacts AS c " + "WHERE c.firstname=@firstName";ObjectQuery<Contact> contacts = new ObjectQuery<Contact>(qStr, context);contacts.Parameters.Add(new ObjectParameter("firstName", "Robert"));

Une autre façon de faire une requête

Lorsqu’on fait une requête, seuls les éléments de la requête serons affectés au résultat de la requête.

Par exemple:var contacts= from c in context.Contacts select c; Seul les contacts sont chargés à partir de la

base de données, les données en liens ne sont pas chargé. Autrement la base de données serait toujours téléchargée…

lazy loading

Le Lazyloading fait donc des requêtes constamment pour permettre au programeur d’avoir accès aux données.

Exemple:var contacts= from c in context.Contacts select c;foreach (var contact in contacts){ Console.WriteLine("{0} #Addresses: {1}", contact.LastName,contact.Addresses.Count());}Ainsi, s’il y a 10 contacts, il y aura 11 requêtes de réalisées.

Lazy Loading

Soit qu’on fait une requête complète.from c in context.Contacts.Include("Addresses")where c.LastName.StartsWith("J")select c;

Soit qu’on désactive le lazy loading essayer de filtrer les données qui seront chargées.

Solution?

var context = new SampleEntities();context.ContextOptions.LazyLoadingEnabled = false;var addresses = from a in context.Addresses select a ;foreach (var address in addresses){

if (address.CountryRegion != null){

if (address.CountryRegion.Trim() == "UK"){address.ContactReference.Load();}

}

}

Si on désactive le Lazy Loading

Nous avons vue trois différentes façon de faire une requête sur le MODÈLE.

Nous avons vue le Lazy Loading. Maintenant, à votre tour de jouer.

Conclusion

Recommended