LINQ et Entity Framework Sébastien Ros et Fabrice Marguerie Page     11 Février 2008
Qui sommes-nous ? <ul><li>Sébastien Ros </li></ul><ul><ul><li>Architecte Logiciel </li></ul></ul><ul><ul><li>Co-fondateur ...
Objectif <ul><li>Innovant </li></ul><ul><ul><li>Architecture d’abstraction des données </li></ul></ul><ul><li>Evolutif </l...
Présentation Page  
Définition <ul><li>Entity Framework </li></ul><ul><ul><li>Un ensemble de technologies supportant le développement d’applic...
Rappel Page     SQL DS Base de données relationnelle Application finale Structured Query Language Données structurées
Rappel Page     DAL Data Access Layer Appel de méthode SQL DS DS Get() SQL DS
Rappel Page     DAL Business Object BO Get() SQL DS
Rappel Page     DAL MSSQL, Oracle, MySQL, DB2, … DAL DAL BO Get() SQL DS
Rappel Page     DAL ORM OQL  BO Object-Relational Mapping Différents schémas possibles, Table Per Hierarchy, … Langage de...
Composants d’un ORM Page     Dialectes MSSQL Oracle DB2 Modèle Logique Relationnel DataTable DataRow Object Services Sess...
Persistence Framework Page     Modèle Logique Relationnel Dialectes Object Services MSSQL Oracle DB2 Session Configuratio...
Définition (Mise à jour) <ul><li>EF est « aussi » un outil de mapping objet-relationnel </li></ul><ul><li>EF est potentiel...
Composants Page     EntityData Reader IEnumerable<T> DBDataReader Entity SQL (eSQL) LINQ to Entities EntityClient Data Pr...
Démonstration Développement avec ADO.NET Entity Framework Page  
Fonctionnalités d’un ORM Que demander de plus ? Page  
Connecteurs externes Page     <ul><li>Sortie prévue automne 2008 </li></ul>
Environnement distribué <ul><li>Modification d’une grappe objet sur un tiers distribué </li></ul><ul><li>Détection des mod...
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...
Interfaces Page     SELECT VALUE  n  FROM  INommable  AS  n Personne Animal INommable
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>Pa...
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></u...
Optimisation des requêtes <ul><li>Requêtes de mises à jour seulement sur les propriétés modifiées </li></ul>Page     Cust...
Contraintes imposées au modèle objet Page  
Démarches Page  
Outils d’industrialisation <ul><li>Utilitaires  </li></ul><ul><ul><li>Génération de code </li></ul></ul><ul><ul><li>Généra...
Divers <ul><li>Procédures stockées </li></ul><ul><li>Déclaration du mapping </li></ul><ul><ul><li>Fichier XML </li></ul></...
Démonstration Comparaison pratique des différents outils Page  
Performances brutes Page  
LINQ et les ORM Page  
Rappels sur LINQ <ul><li>LINQ ? </li></ul><ul><ul><li>Requêtes intégrées aux langages de programmation </li></ul></ul><ul>...
Positionnement <ul><li>La place de LINQ dans un outil de mapping </li></ul><ul><ul><li>Alternative aux langages de requêta...
LINQ to Entities <ul><li>Alternative à Entity SQL </li></ul><ul><li>Avantages </li></ul><ul><ul><li>Validation à la compil...
Optimisation des requêtes <ul><li>Requêtes compilées </li></ul><ul><ul><li>CompiledQuery.Compile </li></ul></ul>Page     ...
Requêtes dynamiques Page  
Plusieurs solutions… <ul><li>LINQ to Entities </li></ul><ul><li>ObjectQuery<T> </li></ul><ul><li>Entity SQL </li></ul>Page...
LINQ to Entities <ul><li>Requête enrichie progressivement et conditionnellement </li></ul>Page     var  query = from  cus...
ObjectQuery<T> <ul><li>Query Builder Methods </li></ul>Page     String  sortProperty = comboSortOrder.SelectedText; Objec...
Entity SQL <ul><li>Concaténation ou  String.Format() </li></ul><ul><li>Solution la plus souple, mais la moins structurée <...
Démonstration LINQ dans tous ses états Page  
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...
Conclusion Page  
EF dans la sphère Microsoft <ul><li>ADO.NET Data Services  (ex Astoria) </li></ul><ul><ul><li>Resource Oriented Architectu...
Rappel <ul><li>Innovant </li></ul><ul><ul><li>Architecture d’abstraction des données </li></ul></ul><ul><li>Evolutif </li>...
Annexes <ul><li>Les autres présentations de ADO.NET EF </li></ul><ul><ul><li>Matthieu Mezil et Michel Perfetti (LAN308) </...
Annexes <ul><li>Magazine CoDe Focus 2007 Volume 4 </li></ul><ul><ul><li>An Entity Data Model for Relational Data Part I: D...
Annexes <ul><li>LINQ in Action ;) </li></ul><ul><ul><li>linq-book.com </li></ul></ul>Page     Fabrice Marguerie Steve Eic...
Questions ? Page  
Prochain SlideShare
Chargement dans…5
×

Linq et Entity framework

9 953 vues

Publié le

Linq et Entity Framework

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
9 953
Sur SlideShare
0
Issues des intégrations
0
Intégrations
56
Actions
Partages
0
Téléchargements
298
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • Entreprise JavaBeans 3.0
  • 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 

    ×