linq et entity framework

Post on 10-May-2015

9.278 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Linq et Entity Framework

TRANSCRIPT

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 ?

top related