Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Linq et Entity framework

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 48 Publicité

Plus De Contenu Connexe

Similaire à Linq et Entity framework (20)

Publicité

Plus récents (20)

Linq et Entity framework

  1. 1. LINQ et Entity Framework Sébastien Ros et Fabrice Marguerie Page  11 Février 2008
  2. 2. Qui sommes-nous ? <ul><li>Sébastien Ros </li></ul><ul><ul><li>Architecte Logiciel </li></ul></ul><ul><ul><li>Co-fondateur de Evaluant </li></ul></ul><ul><ul><li>Spécialiste du Mapping Objet-Relationnel </li></ul></ul><ul><ul><ul><li>Créateur des outils Data Tier Modeler et Euss </li></ul></ul></ul><ul><li>Fabrice Marguerie </li></ul><ul><ul><li>Architecte Logiciel </li></ul></ul><ul><ul><li>Expertise .NET - MVP </li></ul></ul><ul><ul><li>Créateur des sites SharpToolbox.com et Proagora.com </li></ul></ul><ul><ul><li>Auteur du livre LINQ in Action </li></ul></ul>Page 
  3. 3. Objectif <ul><li>Innovant </li></ul><ul><ul><li>Architecture d’abstraction des données </li></ul></ul><ul><li>Evolutif </li></ul><ul><ul><li>Extensibilité des fournisseurs </li></ul></ul><ul><li>Adapté à l’industrie </li></ul><ul><ul><li>Outils graphiques </li></ul></ul><ul><ul><li>Supporté par Microsoft </li></ul></ul><ul><ul><li>Suivi par les acteurs du marché </li></ul></ul>Page 
  4. 4. Présentation Page 
  5. 5. Définition <ul><li>Entity Framework </li></ul><ul><ul><li>Un ensemble de technologies supportant le développement d’applications orientées données et autorisant le développeur à utiliser des modèles logiques associés à des sources de données physiques. </li></ul></ul><ul><li>EF n’est pas un outil de mapping objet relationnel </li></ul>Page 
  6. 6. Rappel Page  SQL DS Base de données relationnelle Application finale Structured Query Language Données structurées
  7. 7. Rappel Page  DAL Data Access Layer Appel de méthode SQL DS DS Get() SQL DS
  8. 8. Rappel Page  DAL Business Object BO Get() SQL DS
  9. 9. Rappel Page  DAL MSSQL, Oracle, MySQL, DB2, … DAL DAL BO Get() SQL DS
  10. 10. Rappel Page  DAL ORM OQL BO Object-Relational Mapping Différents schémas possibles, Table Per Hierarchy, … Langage de requête objet et indépendant du schéma LINQ BO Get() SQL DS
  11. 11. Composants d’un ORM Page  Dialectes MSSQL Oracle DB2 Modèle Logique Relationnel DataTable DataRow Object Services Session Configuration
  12. 12. Persistence Framework Page  Modèle Logique Relationnel Dialectes Object Services MSSQL Oracle DB2 Session Configuration … DataTable DataRow … … Modèle Conceptuel Entity Relationship
  13. 13. Définition (Mise à jour) <ul><li>EF est « aussi » un outil de mapping objet-relationnel </li></ul><ul><li>EF est potentiellement une abstraction ultime de n’importe quelle source de données </li></ul><ul><ul><li>Y compris les données relationnelles </li></ul></ul>Page 
  14. 14. Composants Page  EntityData Reader IEnumerable<T> DBDataReader Entity SQL (eSQL) LINQ to Entities EntityClient Data Provider EDM Conceptual Schema Definition Language ( .csdl ) Store Schema Definition Language ( .ssdl ) Mapping Specification Language ( .msl ) Object Services ObjectContext ObjectQuery<T> ADO.NET Providers MS SQL Server Oracle MySQL DB2 SQL Stored Procs
  15. 15. Démonstration Développement avec ADO.NET Entity Framework Page 
  16. 16. Fonctionnalités d’un ORM Que demander de plus ? Page 
  17. 17. Connecteurs externes Page  <ul><li>Sortie prévue automne 2008 </li></ul>
  18. 18. Environnement distribué <ul><li>Modification d’une grappe objet sur un tiers distribué </li></ul><ul><li>Détection des modifications </li></ul><ul><ul><li>Pattern « Unit Of Work » </li></ul></ul><ul><li>Entity Framework EntityBag </li></ul><ul><ul><li>Perseus </li></ul></ul><ul><li>Transactions distribuées </li></ul>Page 
  19. 19. Héritage <ul><li>Stratégies de mapping </li></ul><ul><ul><li>Une table par hiérarchie </li></ul></ul><ul><ul><li>Une table pour chaque sous classe </li></ul></ul><ul><ul><li>Une table par classe concrète </li></ul></ul><ul><li>Chargement polymorphe </li></ul><ul><ul><li>Requêter un type renvoie tous les types enfants </li></ul></ul>Page 
  20. 20. Interfaces Page  SELECT VALUE n FROM INommable AS n Personne Animal INommable
  21. 21. Relations <ul><li>Cardinalités </li></ul><ul><ul><li>One-to-many </li></ul></ul><ul><ul><li>Many-to-many </li></ul></ul>Page  <ul><li>Composition </li></ul>Customer Order * Student Course * * Customer Order *
  22. 22. Génériques <ul><li>Exploitation des génériques dans les API </li></ul><ul><li>Sérialisation de classes génériques </li></ul>Page  public class Traduction <T> { public string Langue { get ; set ; } public T Valeur { get ; set ; } public T Traduction { get ; set ; } }   class Personne { public string Nom { get ; set ; } public Traduction < string > Titre { get ; set ; } }
  23. 23. Optimisation des requêtes <ul><li>Requêtes de mises à jour seulement sur les propriétés modifiées </li></ul>Page  Customer customer = GetCustomerById( 'SAMJA' ); customer.ContactName = &quot;Sami Jaber&quot; ; UpdateCustomer(customer); UPDATE [Customers] SET [ContactName] = 'Sami Jaber' WHERE [CustomerID] = 'SAMJA'
  24. 24. Contraintes imposées au modèle objet Page 
  25. 25. Démarches Page 
  26. 26. Outils d’industrialisation <ul><li>Utilitaires </li></ul><ul><ul><li>Génération de code </li></ul></ul><ul><ul><li>Génération de mapping </li></ul></ul><ul><li>Outils graphiques </li></ul><ul><ul><li>Editeur de mapping </li></ul></ul><ul><li>Cache de premier niveau </li></ul><ul><li>Cache de second niveau </li></ul><ul><ul><li>Distribution du cache </li></ul></ul><ul><li>Synchronisation des données </li></ul><ul><ul><li>Synchronisation au niveau du modèle conceptuel </li></ul></ul>Page 
  27. 27. Divers <ul><li>Procédures stockées </li></ul><ul><li>Déclaration du mapping </li></ul><ul><ul><li>Fichier XML </li></ul></ul><ul><ul><li>Attributs </li></ul></ul><ul><li>Types de clés </li></ul><ul><ul><li>GUIDs </li></ul></ul><ul><ul><li>Natives </li></ul></ul><ul><ul><li>Métier </li></ul></ul><ul><ul><li>Multiples </li></ul></ul>Page 
  28. 28. Démonstration Comparaison pratique des différents outils Page 
  29. 29. Performances brutes Page 
  30. 30. LINQ et les ORM Page 
  31. 31. Rappels sur LINQ <ul><li>LINQ ? </li></ul><ul><ul><li>Requêtes intégrées aux langages de programmation </li></ul></ul><ul><ul><li>Grâce à des extensions des langages </li></ul></ul><ul><ul><li>C# 3, VB 9, F#, … </li></ul></ul><ul><li>Variantes </li></ul><ul><ul><li>LINQ to Objects, LINQ to XML, LINQ to DataSet (IEnumerable) </li></ul></ul><ul><ul><li>LINQ to SQL, LINQ to Entities (IQueryable) </li></ul></ul><ul><ul><li>Extensible (LINQ to X) </li></ul></ul>Page 
  32. 32. Positionnement <ul><li>La place de LINQ dans un outil de mapping </li></ul><ul><ul><li>Alternative aux langages de requêtage d’objets des outils (OQL) </li></ul></ul><ul><li>Produits offrant un support de LINQ </li></ul><ul><ul><li>LINQ to SQL </li></ul></ul><ul><ul><li>Entity Framework </li></ul></ul><ul><ul><li>Genome </li></ul></ul><ul><ul><li>Vanatec OpenAccess </li></ul></ul><ul><ul><li>Euss </li></ul></ul><ul><ul><li>LLBLGen Pro (prochainement) </li></ul></ul><ul><ul><li>NHibernate (prochainement ?) </li></ul></ul>Page 
  33. 33. LINQ to Entities <ul><li>Alternative à Entity SQL </li></ul><ul><li>Avantages </li></ul><ul><ul><li>Validation à la compilation </li></ul></ul><ul><ul><li>Typage fort </li></ul></ul><ul><ul><li>IntelliSense </li></ul></ul><ul><ul><li>Syntaxe LINQ commune </li></ul></ul><ul><li>Limites </li></ul><ul><ul><li>Pas aussi puissant qu’un langage spécifique comme eSQL </li></ul></ul><ul><ul><li>Attention où sont exécutées les requêtes </li></ul></ul>Page 
  34. 34. Optimisation des requêtes <ul><li>Requêtes compilées </li></ul><ul><ul><li>CompiledQuery.Compile </li></ul></ul>Page  var query = CompiledQuery .Compile< Entities , DateTime , IQueryable < Order >>( (context, minOrderDate) => from order in context.Orders where order.OrderDate > minOrderDate orderby order.OrderDate select order); DateTime date = new DateTime (2003, 3, 8); using ( Enities entities = new Entities ()) { IQueryable < Order > orders = query.Invoke(entities, date); }
  35. 35. Requêtes dynamiques Page 
  36. 36. Plusieurs solutions… <ul><li>LINQ to Entities </li></ul><ul><li>ObjectQuery<T> </li></ul><ul><li>Entity SQL </li></ul>Page 
  37. 37. LINQ to Entities <ul><li>Requête enrichie progressivement et conditionnellement </li></ul>Page  var query = from customer in objectContext.Customers where customer.Orders.Any() select customer; if (sortingRequested) query = query.OrderBy(customer => customer.Name); if (! String .IsNullOrEmpty(city)) query = query.Where(customer => customer.City == city);
  38. 38. ObjectQuery<T> <ul><li>Query Builder Methods </li></ul>Page  String sortProperty = comboSortOrder.SelectedText; ObjectQuery < Customer > customers = objectContext.Customers.OrderBy( &quot;it.&quot; + sortProperty);
  39. 39. Entity SQL <ul><li>Concaténation ou String.Format() </li></ul><ul><li>Solution la plus souple, mais la moins structurée </li></ul>Page  String query = &quot;SELECT VALUE c FROM Customers AS c&quot; ; if (! String .IsNullOrEmpty(city)) query += String .Format( &quot; WHERE c.City == '{0}'&quot; , city); String sortProperty = comboSortOrder.SelectedText; query += &quot; ORDER BY c.&quot; + sortProperty;
  40. 40. Démonstration LINQ dans tous ses états Page 
  41. 41. LINQ, le JDO du .NET <ul><li>Pattern Repository </li></ul><ul><ul><li>Abstraction vis-à-vis de l’entrepôt et du mode d’accès </li></ul></ul><ul><ul><li>Une méthode pour chaque filtre </li></ul></ul><ul><li>Utilisation de LINQ comme langage de contrainte </li></ul>Page  Repository < Customer >.Find(c => c.Name = &quot;Microsoft&quot; ); Repository < Customer > .Find() .OrderBy(c => c.City) .Take(10) .ToList(); CustomerRepository .GetByName( &quot;Microsoft&quot; );
  42. 42. Conclusion Page 
  43. 43. EF dans la sphère Microsoft <ul><li>ADO.NET Data Services (ex Astoria) </li></ul><ul><ul><li>Resource Oriented Architecture (ROA) - ARC303 Aurélien Pelletier </li></ul></ul><ul><ul><li>Projet Astoria - LAN311 Mitsu Furuta , Pierre Lagarde </li></ul></ul><ul><li>LINQ to SQL (ex DLinq) </li></ul><ul><ul><li>Principalement destiné au RAD avec un mapping simple sur une base SQL Server </li></ul></ul><ul><ul><li>Quand utiliser LINQ to SQL ? </li></ul></ul><ul><ul><ul><li>Avec SQL Server </li></ul></ul></ul><ul><ul><ul><li>1 table = 1 entité </li></ul></ul></ul><ul><ul><ul><li>Héritage de type TPH (Table Per Hierachy) </li></ul></ul></ul><ul><ul><ul><li>Pour utiliser vos POCO </li></ul></ul></ul>Page 
  44. 44. Rappel <ul><li>Innovant </li></ul><ul><ul><li>Architecture d’abstraction des données </li></ul></ul><ul><li>Evolutif </li></ul><ul><ul><li>Extensibilité des fournisseurs </li></ul></ul><ul><li>Adapté à l’industrie </li></ul><ul><ul><li>Outils graphiques </li></ul></ul><ul><ul><li>Supporté par Microsoft </li></ul></ul><ul><ul><li>Suivi par les acteurs du marché </li></ul></ul><ul><li>Actuellement en version Beta </li></ul>Page 
  45. 45. Annexes <ul><li>Les autres présentations de ADO.NET EF </li></ul><ul><ul><li>Matthieu Mezil et Michel Perfetti (LAN308) </li></ul></ul><ul><ul><li>Présentent un aspect plus orienté pratique </li></ul></ul><ul><li>Téléchargements </li></ul><ul><ul><li>Entity Framework Beta 3 http://go.microsoft.com/fwlink/?LinkId=104981 </li></ul></ul><ul><ul><li>Entity Framework Tools CTP http://go.microsoft.com/fwlink/?LinkId=104983 </li></ul></ul><ul><ul><li>Exemples http://www.codeplex.com/adonetsamples </li></ul></ul><ul><ul><li>eSqlBlast http://code.msdn.com/esql </li></ul></ul><ul><ul><li>Entity Framework EntityBag (Perseus) http://code.msdn.com/entitybag </li></ul></ul>Page 
  46. 46. Annexes <ul><li>Magazine CoDe Focus 2007 Volume 4 </li></ul><ul><ul><li>An Entity Data Model for Relational Data Part I: Defining the Entity Data Model http://www.code-magazine.com/Article.aspx?quickid=990712022 </li></ul></ul><ul><ul><li>An Entity Data Model for Relational Data Part II: Mapping an Entity Data Model to a Relational Store http://www.code-magazine.com/Article.aspx?quickid=990712032 </li></ul></ul><ul><ul><li>Programming Against the ADO.NET Entity Framework http://www.code-magazine.com/Article.aspx?quickid=990712042 </li></ul></ul><ul><li>Blogs </li></ul><ul><ul><li>http://blogs.msdn.com/adonet </li></ul></ul><ul><ul><li>http://blogs.msdn.com/data </li></ul></ul><ul><ul><li>http://blogs.msdn.com/diego </li></ul></ul><ul><ul><li>http://blogs.msdn.com/dsimmons </li></ul></ul><ul><ul><li>http://blogs.msdn.com/alexj </li></ul></ul>Page 
  47. 47. Annexes <ul><li>LINQ in Action ;) </li></ul><ul><ul><li>linq-book.com </li></ul></ul>Page  Fabrice Marguerie Steve Eichert Jim Wooley 1er février 2008 Papier ou PDF 576 pages C# et VB Chapitres gratuits disponibles Code source complet disponible gratuitement Part 1 Getting started 1 Introducing LINQ 2 C# and VB.NET language enhancements 3 LINQ building blocks Part 2 Querying objects in memory 4 Getting familiar with LINQ to Objects 5 Beyond basic in-memory queries Part 3 Querying relational data 6 Getting started with LINQ to SQL 7 Peeking under the covers of LINQ to SQL 8 Advanced LINQ to SQL features Part 4 Manipulating XML 9 Introducing LINQ to XML 10 Query and transform XML with LINQ to XML 11 Common LINQ to XML scenarios Part 5 LINQing it all together 12 Extending LINQ 13 LINQ in every layer appendix: The standard query operators bonus chapter: Working with LINQ and DataSets
  48. 48. Questions ? Page 

Notes de l'éditeur

  • Entreprise JavaBeans 3.0

×