![Page 1: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/1.jpg)
Développement d’application avec base de donnéesSemaine 2: Requête avec l’Entity Data Model
Automne 2013
![Page 2: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/2.jpg)
Méthodes pour faire des requêtes Premier exemple de requêtes…mais plus de
questions que de réponses…
Plan de présentation
![Page 3: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/3.jpg)
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
![Page 4: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/4.jpg)
Query the Model, Not the Database Laissons ce travail à ADO.NET et son provider.
Méthodes pour faire des requêtes
![Page 5: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/5.jpg)
Première requête -> Parcourir une collection
![Page 6: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/6.jpg)
En fait! Var contacts = context.Contacts; c’est
ObjectSet<Contact> contacts = context.Contacts;
Type
![Page 7: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/7.jpg)
Les classes suivantes sont générés automatiquement.
Mais d’où viennent ces classes
![Page 8: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/8.jpg)
Les propriétés de navigation nous permettent d’interroger les entités associés.
Les propriétés de navigation
![Page 9: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/9.jpg)
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
![Page 10: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/10.jpg)
Pourquoi le la clause FROM est au début contrairement au SQL?
Question de culture!
![Page 11: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/11.jpg)
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
![Page 12: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/12.jpg)
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
![Page 13: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/13.jpg)
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
![Page 14: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/14.jpg)
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
![Page 15: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/15.jpg)
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?
![Page 16: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/16.jpg)
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
![Page 17: Développement d’application avec base de données Semaine 2: Requête avec l’Entity Data Model Automne 2013](https://reader036.vdocuments.mx/reader036/viewer/2022062512/551d9dc3497959293b8e1a39/html5/thumbnails/17.jpg)
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