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

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

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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