Linq et Entity framework

33 %
67 %
Information about Linq et Entity framework

Published on February 12, 2008

Author: samijaber

Source: slideshare.net

Description

Linq et Entity Framework

LINQ et Entity Framework Sébastien Ros et Fabrice Marguerie Page  11 Février 2008

Qui sommes-nous ? Sébastien Ros Architecte Logiciel Co-fondateur de Evaluant Spécialiste du Mapping Objet-Relationnel Créateur des outils Data Tier Modeler et Euss Fabrice Marguerie Architecte Logiciel Expertise .NET - MVP Créateur des sites SharpToolbox.com et Proagora.com Auteur du livre LINQ in Action Page 

Sébastien Ros

Architecte Logiciel

Co-fondateur de Evaluant

Spécialiste du Mapping Objet-Relationnel

Créateur des outils Data Tier Modeler et Euss

Fabrice Marguerie

Architecte Logiciel

Expertise .NET - MVP

Créateur des sites SharpToolbox.com et Proagora.com

Auteur du livre LINQ in Action

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 

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é

Présentation Page 

Définition Entity Framework 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. EF n’est pas un outil de mapping objet relationnel Page 

Entity Framework

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.

EF n’est pas un outil de mapping objet relationnel

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 requête objet et indépendant du schéma LINQ BO Get() SQL DS

Composants d’un ORM Page  Dialectes MSSQL Oracle DB2 Modèle Logique Relationnel DataTable DataRow Object Services Session Configuration

Persistence Framework Page  Modèle Logique Relationnel Dialectes Object Services MSSQL Oracle DB2 Session Configuration … DataTable DataRow … … Modèle Conceptuel Entity Relationship

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 

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

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

Démonstration Développement avec ADO.NET Entity Framework Page 

Fonctionnalités d’un ORM Que demander de plus ? Page 

Connecteurs externes Page  Sortie prévue automne 2008

Sortie prévue automne 2008

Environnement distribué Modification d’une grappe objet sur un tiers distribué Détection des modifications Pattern « Unit Of Work » Entity Framework EntityBag Perseus Transactions distribuées Page 

Modification d’une grappe objet sur un tiers distribué

Détection des modifications

Pattern « Unit Of Work »

Entity Framework EntityBag

Perseus

Transactions distribuées

Héritage Stratégies de mapping Une table par hiérarchie Une table pour chaque sous classe Une table par classe concrète Chargement polymorphe Requêter un type renvoie tous les types enfants Page 

Stratégies de mapping

Une table par hiérarchie

Une table pour chaque sous classe

Une table par classe concrète

Chargement polymorphe

Requêter un type renvoie tous les types enfants

Interfaces Page  SELECT VALUE n FROM INommable AS n Personne Animal INommable

Relations Cardinalités One-to-many Many-to-many Page  Composition Customer Order * Student Course * * Customer Order *

Cardinalités

One-to-many

Many-to-many

Composition

Génériques Exploitation des génériques dans les API Sérialisation de classes génériques 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 ; } }

Exploitation des génériques dans les API

Sérialisation de classes génériques

Optimisation des requêtes Requêtes de mises à jour seulement sur les propriétés modifiées Page  Customer customer = GetCustomerById( 'SAMJA' ); customer.ContactName = &quot;Sami Jaber&quot; ; UpdateCustomer(customer); UPDATE [Customers] SET [ContactName] = 'Sami Jaber' WHERE [CustomerID] = 'SAMJA'

Requêtes de mises à jour seulement sur les propriétés modifiées

Contraintes imposées au modèle objet Page 

Démarches Page 

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 

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

Divers Procédures stockées Déclaration du mapping Fichier XML Attributs Types de clés GUIDs Natives Métier Multiples Page 

Procédures stockées

Déclaration du mapping

Fichier XML

Attributs

Types de clés

GUIDs

Natives

Métier

Multiples

Démonstration Comparaison pratique des différents outils Page 

Performances brutes Page 

LINQ et les ORM Page 

Rappels sur LINQ LINQ ? Requêtes intégrées aux langages de programmation Grâce à des extensions des langages C# 3, VB 9, F#, … Variantes LINQ to Objects, LINQ to XML, LINQ to DataSet (IEnumerable) LINQ to SQL, LINQ to Entities (IQueryable) Extensible (LINQ to X) Page 

LINQ ?

Requêtes intégrées aux langages de programmation

Grâce à des extensions des langages

C# 3, VB 9, F#, …

Variantes

LINQ to Objects, LINQ to XML, LINQ to DataSet (IEnumerable)

LINQ to SQL, LINQ to Entities (IQueryable)

Extensible (LINQ to X)

Positionnement La place de LINQ dans un outil de mapping Alternative aux langages de requêtage d’objets des outils (OQL) Produits offrant un support de LINQ LINQ to SQL Entity Framework Genome Vanatec OpenAccess Euss LLBLGen Pro (prochainement) NHibernate (prochainement ?) Page 

La place de LINQ dans un outil de mapping

Alternative aux langages de requêtage d’objets des outils (OQL)

Produits offrant un support de LINQ

LINQ to SQL

Entity Framework

Genome

Vanatec OpenAccess

Euss

LLBLGen Pro (prochainement)

NHibernate (prochainement ?)

LINQ to Entities Alternative à Entity SQL Avantages Validation à la compilation Typage fort IntelliSense Syntaxe LINQ commune Limites Pas aussi puissant qu’un langage spécifique comme eSQL Attention où sont exécutées les requêtes Page 

Alternative à Entity SQL

Avantages

Validation à la compilation

Typage fort

IntelliSense

Syntaxe LINQ commune

Limites

Pas aussi puissant qu’un langage spécifique comme eSQL

Attention où sont exécutées les requêtes

Optimisation des requêtes Requêtes compilées CompiledQuery.Compile 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); }

Requêtes compilées

CompiledQuery.Compile

Requêtes dynamiques Page 

Plusieurs solutions… LINQ to Entities ObjectQuery<T> Entity SQL Page 

LINQ to Entities

ObjectQuery<T>

Entity SQL

LINQ to Entities Requête enrichie progressivement et conditionnellement 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);

Requête enrichie progressivement et conditionnellement

ObjectQuery<T> Query Builder Methods Page  String sortProperty = comboSortOrder.SelectedText; ObjectQuery < Customer > customers = objectContext.Customers.OrderBy( &quot;it.&quot; + sortProperty);

Query Builder Methods

Entity SQL Concaténation ou String.Format() Solution la plus souple, mais la moins structurée 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;

Concaténation ou String.Format()

Solution la plus souple, mais la moins structurée

Démonstration LINQ dans tous ses états Page 

LINQ, le JDO du .NET Pattern Repository Abstraction 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  Repository < Customer >.Find(c => c.Name = &quot;Microsoft&quot; ); Repository < Customer > .Find() .OrderBy(c => c.City) .Take(10) .ToList(); CustomerRepository .GetByName( &quot;Microsoft&quot; );

Pattern Repository

Abstraction 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

Conclusion Page 

EF dans la sphère Microsoft ADO.NET Data Services (ex Astoria) Resource Oriented Architecture (ROA) - ARC303 Aurélien Pelletier Projet Astoria - LAN311 Mitsu 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 

ADO.NET Data Services (ex Astoria)

Resource Oriented Architecture (ROA) - ARC303 Aurélien Pelletier

Projet Astoria - LAN311 Mitsu 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

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 

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

Annexes Les autres présentations de ADO.NET EF Matthieu Mezil et Michel Perfetti (LAN308) Présentent un aspect plus orienté pratique Téléchargements Entity Framework Beta 3 http://go.microsoft.com/fwlink/?LinkId=104981 Entity Framework Tools CTP http://go.microsoft.com/fwlink/?LinkId=104983 Exemples http://www.codeplex.com/adonetsamples eSqlBlast http://code.msdn.com/esql Entity Framework EntityBag (Perseus) http://code.msdn.com/entitybag Page 

Les autres présentations de ADO.NET EF

Matthieu Mezil et Michel Perfetti (LAN308)

Présentent un aspect plus orienté pratique

Téléchargements

Entity Framework Beta 3 http://go.microsoft.com/fwlink/?LinkId=104981

Entity Framework Tools CTP http://go.microsoft.com/fwlink/?LinkId=104983

Exemples http://www.codeplex.com/adonetsamples

eSqlBlast http://code.msdn.com/esql

Entity Framework EntityBag (Perseus) http://code.msdn.com/entitybag

Annexes Magazine CoDe Focus 2007 Volume 4 An Entity Data Model for Relational Data Part I: Defining the Entity Data Model http://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 Blogs http://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 

Magazine CoDe Focus 2007 Volume 4

An Entity Data Model for Relational Data Part I: Defining the Entity Data Model http://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

Blogs

http://blogs.msdn.com/adonet

http://blogs.msdn.com/data

http://blogs.msdn.com/diego

http://blogs.msdn.com/dsimmons

http://blogs.msdn.com/alexj

Annexes LINQ in Action ;) linq-book.com 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

LINQ in Action ;)

linq-book.com

Questions ? Page 

Add a comment

Related presentations

Related pages

Difference between LINQ to SQL and Entity Framework

LINQ to SQL allow you to query and modify SQL Server database by using LINQ syntax. Entity framework is a great ORM shipped by Microsoft which allow you to ...
Read more

LINQ to Entities

LINQ to Entities bietet LINQ (Language Integrated Query)-Unterstützung, die es Entwicklern ermöglicht, in Visual Basic oder Visual C# Abfragen für das ...
Read more

Msdn forums - ADO.NET Entity Framework and LINQ to Entities

... , i have moved forward to try entity framework,but i have problem. ... ADO.NET Entity Framework and LINQ to Entities I have this expression tree: ...
Read more

The ADO.NET Entity Framework Overview

Entity SQL provides the Entity Framework with a dynamic query capability, where queries can be statically ... LINQ and the ADO.NET Entity Framework.
Read more

c# - Linq with entity framework - Stack Overflow

Linq with entity framework. up vote 2 down vote favorite. 2. I'm new to LINQ and Entity Framework and would appreciate some advice on the following scenario.
Read more

.net - Entity Framework vs LINQ to SQL - Stack Overflow

When trying to decide between using the Entity Framework and LINQ to SQL as an ORM, ... Entity Framework VS LINQ to SQL VS ADO.NET with stored procedures?
Read more

Forums Msdn - LINQ et Entity Framework

Bonjour, L'équipe ADO .NET de Microsoft vient de mettre en ligne un tutoriel pour apprendre à utiliser l'Entity Framework ...
Read more

ADO.NET Entity Framework versus LINQ-to-SQL

ADO.NET Entity Framework versus LINQ-to-SQL - Informationen über ADO.NET Entity Framework
Read more

Entity Framework – Wikipedia

Entity Framework Modellieransätze Code First Model First; Keine Datenbank vorhanden: Bestehende Klassen werden mit Annotationen (Table, Column ...
Read more

Querying with EDM: - Entity Framework Tutorial

Querying with EDM: We have created EDM, ... LINQ-to-Entities operates on entity framework entities to access the data from the underlying database.
Read more