Download - Linq et Entity framework
LINQ et Entity Framework
Sébastien Ros et Fabrice Marguerie
Page 1
11 Février 2008
Qui sommes-nous ?
Sébastien RosArchitecte Logiciel
Co-fondateur de Evaluant
Spécialiste du Mapping Objet-Relationnel
- Créateur des outils Data Tier Modeler et Euss
Fabrice MarguerieArchitecte Logiciel
Expertise .NET - MVP
Créateur des sites SharpToolbox.com et Proagora.com
Auteur du livre LINQ in Action
Page 2
Objectif
Innovant Architecture d’abstraction des données
Evolutif Extensibilité des fournisseurs
Adapté à l’industrie Outils graphiques
Supporté par Microsoft
Suivi par les acteurs du marché
Page 3
Page 4
Présentation
Définition
Entity FrameworkUn 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.
EF n’est pas un outil de mapping objet relationnel
Page 5
Rappel
Page 6
SQL
DS
Base de données relationnelle
Base de données relationnelle
Application finaleApplication finale
Structured Query LanguageStructured Query Language
Données structuréesDonnées structurées
Rappel
Page 7
SQL
DSDALDAL
DS
Get() SQL
DS
Data Access LayerData Access LayerAppel de méthodeAppel de méthode
Rappel
Page 8
DALDALBO
Get() SQL
DS
Business ObjectBusiness Object
Rappel
Page 9
DALDAL
BO
Get() SQL
DS
MSSQL, Oracle, MySQL, DB2, …
MSSQL, Oracle, MySQL, DB2, …
DALDALDALDAL
Rappel
Page 10
DALDALBO
Get() SQL
DSORMORM
OQL
BO
Object-Relational MappingObject-Relational MappingDifférents schémas
possibles,Table Per Hierarchy, …
Différents schémas possibles,
Table Per Hierarchy, …
Langage de requête objet et indépendant du schéma
Langage de requête objet et indépendant du schéma
LINQ
Composants d’un ORM
Page 11
Dialectes
MSSQLMSSQL OracleOracleDB2DB2
Modèle Logique Relationnel
DataTableDataTable DataRowDataRow
Object Services
SessionSession ConfigurationConfiguration
Persistence Framework
Page 12
Modèle Logique Relationnel
Dialectes
Object Services
MSSQLMSSQL OracleOracleDB2DB2
SessionSession ConfigurationConfiguration
Modèle Conceptuel
EntityEntity RelationshipRelationship
…DataTableDataTable DataRowDataRow
…
…
Définition (Mise à jour)
EF est « aussi » un outil de mapping objet-relationnel
EF est potentiellement une abstraction ultime de n’importe quelle source de données
Y compris les données relationnelles
Page 13
Composants
Page 14
EntityClient Data Provider
EDMEDMConceptual Schema Definition Language (.csdl)
Conceptual Schema Definition Language (.csdl)
Store Schema Definition
Language (.ssdl)
Store Schema Definition
Language (.ssdl)
Mapping Specification
Language (.msl)
Mapping Specification
Language (.msl)
Object Services
ObjectContextObjectContext
ObjectQuery<T>ObjectQuery<T>
En
tityD
ata
Re
ad
er
En
tityD
ata
Re
ad
er
ADO.NET Providers
MS SQL ServerMS SQL Server
OracleOracle MySQLMySQL
DB2DB2 SQLSQL
Stored ProcsStored Procs
IEn
um
era
ble
<T
>IE
nu
me
rab
le<
T>
DB
Da
taR
ea
de
rD
BD
ata
Re
ad
er
Entity SQL
(eSQL)
Entity SQL
(eSQL)
LINQto
Entities
LINQto
Entities
Page 15
Démonstration
Développement avec ADO.NET Entity Framework
Page 16
Fonctionnalités d’un ORM
Que demander de plus ?
Connecteurs externes
Page 17
Sortie prévue automne 2008
Environnement distribué
Modification d’une grappe objet sur un tiers distribué
Détection des modificationsPattern « Unit Of Work »
Entity Framework EntityBag Perseus
Transactions distribuées
Page 18
Héritage
Stratégies de mappingUne table par hiérarchie
Une table pour chaque sous classe
Une table par classe concrète
Chargement polymorpheRequêter un type renvoie tous les types enfants
Page 19
Interfaces
Page 20
SELECT VALUE n FROM INommable AS n
PersonnePersonne AnimalAnimal
INommableINommable
Relations
Page 21
CardinalitésOne-to-many
Many-to-many
Composition
CustomerCustomer OrderOrder*
StudentStudent CourseCourse* *
CustomerCustomer OrderOrder*
Génériques
Exploitation des génériques dans les API
Sérialisation de classes génériques
Page 22
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; }}
Optimisation des requêtes
Requêtes de mises à jour seulement sur les propriétés modifiées
Page 23
Customer customer = GetCustomerById('SAMJA');customer.ContactName = "Sami Jaber";UpdateCustomer(customer);
UPDATE [Customers] SET [ContactName] = 'Sami Jaber' WHERE [CustomerID] = 'SAMJA'
Contraintes imposées au modèle objet
Page 24
Démarches
Page 25
Outils d’industrialisation
Utilitaires
Génération de code
Génération de mapping
Outils graphiques
Editeur de mapping
Cache de premier niveau
Cache de second niveau
Distribution du cache
Synchronisation des données
Synchronisation au niveau du modèle conceptuel
Page 26
Divers
Procédures stockées
Déclaration du mappingFichier XML
Attributs
Types de clésGUIDs
Natives
Métier
Multiples
Page 27
Page 28
Démonstration
Comparaison pratique des différents outils
Performances brutes
Page 29
Page 30
LINQ et les ORM
Rappels sur LINQ
LINQ ?Requêtes intégrées aux langages de programmation
Grâce à des extensions des langages
C# 3, VB 9, F#, …
VariantesLINQ to Objects, LINQ to XML, LINQ to DataSet (IEnumerable)
LINQ to SQL, LINQ to Entities (IQueryable)
Extensible (LINQ to X)
Page 31
Positionnement
La place de LINQ dans un outil de mappingAlternative aux langages de requêtage d’objets des outils (OQL)
Produits offrant un support de LINQLINQ to SQL
Entity Framework
Genome
Vanatec OpenAccess
Euss
LLBLGen Pro (prochainement)
NHibernate (prochainement ?)
Page 32
LINQ to Entities
Alternative à Entity SQL
AvantagesValidation à la compilation
Typage fort
IntelliSense
Syntaxe LINQ commune
LimitesPas aussi puissant qu’un langage spécifique comme eSQL
Attention où sont exécutées les requêtes
Page 33
Optimisation des requêtes
Requêtes compiléesCompiledQuery.Compile
Page 34
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);}
Page 35
Requêtes dynamiques
Plusieurs solutions…
LINQ to Entities
ObjectQuery<T>
Entity SQL
Page 36
LINQ to Entities
Requête enrichie progressivement et conditionnellement
Page 37
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);
ObjectQuery<T>
Query Builder Methods
Page 38
String sortProperty = comboSortOrder.SelectedText;ObjectQuery<Customer> customers = objectContext.Customers.OrderBy("it." + sortProperty);
Entity SQL
Concaténation ou String.Format()
Solution la plus souple, mais la moins structurée
Page 39
String query = "SELECT VALUE c FROM Customers AS c";
if (!String.IsNullOrEmpty(city)) query += String.Format(" WHERE c.City == '{0}'", city);String sortProperty = comboSortOrder.SelectedText;query += " ORDER BY c." + sortProperty;
Page 40
Démonstration
LINQ dans tous ses états
LINQ, le JDO du .NET
Pattern RepositoryAbstraction vis-à-vis de l’entrepôt et du mode d’accès
Une méthode pour chaque filtre
Utilisation de LINQ comme langage de contrainte
Page 41
Repository<Customer>.Find(c => c.Name = "Microsoft");Repository<Customer> .Find() .OrderBy(c => c.City) .Take(10) .ToList();
CustomerRepository.GetByName("Microsoft");
Page 42
Conclusion
EF dans la sphère Microsoft
ADO.NET Data Services (ex Astoria)Resource Oriented Architecture (ROA) - ARC303Aurélien Pelletier
Projet Astoria - LAN311Mitsu Furuta , Pierre Lagarde
LINQ to SQL (ex DLinq)Principalement destiné au RAD avec un mapping simple sur une base SQL Server
Quand utiliser LINQ to SQL ?- Avec SQL Server
- 1 table = 1 entité
- Héritage de type TPH (Table Per Hierachy)
- Pour utiliser vos POCO
Page 43
Rappel
Innovant Architecture d’abstraction des données
Evolutif Extensibilité des fournisseurs
Adapté à l’industrie Outils graphiques
Supporté par Microsoft
Suivi par les acteurs du marché
Actuellement en version Beta
Page 44
Annexes
Les autres présentations de ADO.NET EF Matthieu Mezil et Michel Perfetti (LAN308)
Présentent un aspect plus orienté pratique
TéléchargementsEntity Framework Beta 3http://go.microsoft.com/fwlink/?LinkId=104981
Entity Framework Tools CTPhttp://go.microsoft.com/fwlink/?LinkId=104983
Exempleshttp://www.codeplex.com/adonetsamples
eSqlBlasthttp://code.msdn.com/esql
Entity Framework EntityBag (Perseus)http://code.msdn.com/entitybag
Page 45
Annexes
Magazine CoDe Focus 2007 Volume 4An Entity Data Model for Relational Data Part I: Defining the Entity Data Modelhttp://www.code-magazine.com/Article.aspx?quickid=990712022
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
Programming Against the ADO.NET Entity Framework http://www.code-magazine.com/Article.aspx?quickid=990712042
Blogshttp://blogs.msdn.com/adonet
http://blogs.msdn.com/data
http://blogs.msdn.com/diego
http://blogs.msdn.com/dsimmons
http://blogs.msdn.com/alexj
Page 46
Annexes
LINQ in Action ;)linq-book.com
Page 47
Fabrice MarguerieSteve EichertJim Wooley
1er février 2008Papier ou PDF576 pages
C# et VBChapitres gratuits disponiblesCode source complet disponible gratuitement
Part 1 Getting started1 Introducing LINQ2 C# and VB.NET language enhancements3 LINQ building blocksPart 2 Querying objects in memory4 Getting familiar with LINQ to Objects5 Beyond basic in-memory queriesPart 3 Querying relational data6 Getting started with LINQ to SQL7 Peeking under the covers of LINQ to SQL8 Advanced LINQ to SQL featuresPart 4 Manipulating XML9 Introducing LINQ to XML10 Query and transform XML with LINQ to XML11 Common LINQ to XML scenariosPart 5 LINQing it all together12 Extending LINQ13 LINQ in every layer appendix: The standard query operatorsbonus chapter: Working with LINQ and DataSets
Page 48
Questions ?