linq et entity framework

48
LINQ et Entity Framework Sébastien Ros et Fabrice Marguerie Page 1 11 Février 200

Upload: samijaber

Post on 10-May-2015

9.278 views

Category:

Technology


2 download

DESCRIPTION

Linq et Entity Framework

TRANSCRIPT

Page 1: Linq et Entity framework

LINQ et Entity Framework

Sébastien Ros et Fabrice Marguerie

Page 1

11 Février 2008

Page 2: Linq et Entity framework

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

Page 3: Linq et Entity framework

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: Linq et Entity framework

Page 4

Présentation

Page 5: Linq et Entity framework

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

Page 6: Linq et Entity framework

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

Page 7: Linq et Entity framework

Rappel

Page 7

SQL

DSDALDAL

DS

Get() SQL

DS

Data Access LayerData Access LayerAppel de méthodeAppel de méthode

Page 8: Linq et Entity framework

Rappel

Page 8

DALDALBO

Get() SQL

DS

Business ObjectBusiness Object

Page 9: Linq et Entity framework

Rappel

Page 9

DALDAL

BO

Get() SQL

DS

MSSQL, Oracle, MySQL, DB2, …

MSSQL, Oracle, MySQL, DB2, …

DALDALDALDAL

Page 10: Linq et Entity framework

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

Page 11: Linq et Entity framework

Composants d’un ORM

Page 11

Dialectes

MSSQLMSSQL OracleOracleDB2DB2

Modèle Logique Relationnel

DataTableDataTable DataRowDataRow

Object Services

SessionSession ConfigurationConfiguration

Page 12: Linq et Entity framework

Persistence Framework

Page 12

Modèle Logique Relationnel

Dialectes

Object Services

MSSQLMSSQL OracleOracleDB2DB2

SessionSession ConfigurationConfiguration

Modèle Conceptuel

EntityEntity RelationshipRelationship

…DataTableDataTable DataRowDataRow

Page 13: Linq et Entity framework

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

Page 14: Linq et Entity framework

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: Linq et Entity framework

Page 15

Démonstration

Développement avec ADO.NET Entity Framework

Page 16: Linq et Entity framework

Page 16

Fonctionnalités d’un ORM

Que demander de plus ?

Page 17: Linq et Entity framework

Connecteurs externes

Page 17

Sortie prévue automne 2008

Page 18: Linq et Entity framework

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

Page 19: Linq et Entity framework

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

Page 20: Linq et Entity framework

Interfaces

Page 20

SELECT VALUE n FROM INommable AS n

PersonnePersonne AnimalAnimal

INommableINommable

Page 21: Linq et Entity framework

Relations

Page 21

CardinalitésOne-to-many

Many-to-many

Composition

CustomerCustomer OrderOrder*

StudentStudent CourseCourse* *

CustomerCustomer OrderOrder*

Page 22: Linq et Entity framework

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; }}

Page 23: Linq et Entity framework

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'

Page 24: Linq et Entity framework

Contraintes imposées au modèle objet

Page 24

Page 25: Linq et Entity framework

Démarches

Page 25

Page 26: Linq et Entity framework

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

Page 27: Linq et Entity framework

Divers

Procédures stockées

Déclaration du mappingFichier XML

Attributs

Types de clésGUIDs

Natives

Métier

Multiples

Page 27

Page 28: Linq et Entity framework

Page 28

Démonstration

Comparaison pratique des différents outils

Page 29: Linq et Entity framework

Performances brutes

Page 29

Page 30: Linq et Entity framework

Page 30

LINQ et les ORM

Page 31: Linq et Entity framework

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

Page 32: Linq et Entity framework

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

Page 33: Linq et Entity framework

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

Page 34: Linq et Entity framework

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: Linq et Entity framework

Page 35

Requêtes dynamiques

Page 36: Linq et Entity framework

Plusieurs solutions…

LINQ to Entities

ObjectQuery<T>

Entity SQL

Page 36

Page 37: Linq et Entity framework

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);

Page 38: Linq et Entity framework

ObjectQuery<T>

Query Builder Methods

Page 38

String sortProperty = comboSortOrder.SelectedText;ObjectQuery<Customer> customers = objectContext.Customers.OrderBy("it." + sortProperty);

Page 39: Linq et Entity framework

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: Linq et Entity framework

Page 40

Démonstration

LINQ dans tous ses états

Page 41: Linq et Entity framework

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: Linq et Entity framework

Page 42

Conclusion

Page 43: Linq et Entity framework

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

Page 44: Linq et Entity framework

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

Page 45: Linq et Entity framework

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

Page 46: Linq et Entity framework

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

Page 47: Linq et Entity framework

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: Linq et Entity framework

Page 48

Questions ?