SlideShare une entreprise Scribd logo
1  sur  20
Les Micro ORM, alternatives
à Entity Framework
Anthony Giretti
Consultant sénior .NET chez Technologies NTER (Loto-Québec)
http://anthonygiretti.com
Introduction
L'arrivée il y 10 ans d'Entity Framework a permis de requêter une base de données
sans écrire une seule ligne de SQL.
Ce qui a permis d’augmenter la productivité des développeurs.
Entity Framework a apporté son lot d'avantages mais aussi d'inconvénients…….
Avantage
 Gain de productivité
Inconvénients
 Performances
 Plus complexe qu’il en a l’air (LazyLoading, EagerLoading)
 Nombreux bugs de mise à jour du modèle EDMX en mode Database First
Les alternatives
Aujourd'hui il existe différentes alternatives à ce dernier, les micro ORM.
Nous allons voir en quoi ils sont intéressants :
 Compatibilité avec les différentes bases de données relationnelles
 Simplicité
 Performance
 Communauté autour de ces derniers
Historique
2002
Entity Framework
PetaPoco
Apparition
d’ADO.NET avec
le Framework .NET
2009 20102003 2004 2005 2006 2007 2008 2011 2012 2013 2014 2015 2016 2017
Massive
Dapper
OrmLite
Simple.Data SqlFu
MicroLite
NPoco Uni.Orm NReco
Artisan Orm
XPoco
Origines de PetaPoco, NPoco et XPoco
Massive
(2011)
PetaPoco
(2011)
NPoco
(2012)
XPoco
(2017)
Scénario utilisé
Simple.Data
 Syntaxe entièrement dynamique, conséquence : pas d'IntelliSense.
 Compatible avec plusieurs bases de données :
 SQL Server, Oracle, Mysql, SqlLite, PostgreSql, SqlAnyWhere, Informix Microsoft Access
 Syntaxe peu compliquée (LINQ-like)
 Supporte les transactions
 Performances décevantes
 Gestion de la connexion douteuse : « Simple.Data is quite aggressive in closing
connections and holds no open connections to a data store by default, so you can keep
the Database object returned from the Open*() methods hanging around without
worrying.»
 Obligation de créer une query AdHoc pour populer un objet (relations non
supportées)
 Non testable unitairement
 Était Prometteur mais malheureusement il n’est plus mis à jour depuis 2013
Massive
 MicroOrm fournissant uniquement des données dynamiques
 Compatible avec peu de bases de données relationelles:
SQL Server, Oracle, SqlLite, PostgreSql
 Double Syntaxe SQL et hybride LINQ / SQL
 Fournit les commandes de base uniquement, syntaxe simpliste (pas de Join par exemple)
 Performances intéressantes
 Supporte les transactions
 Obligation de créer une query AdHoc pour populer un objet (relations non supportées)
 Obligation de faire hériter ses Pocos d’une classe nommée « DynamicModel »,
 Mapper ses données dans un autre objet typé similaire ou se contenter de données dynamiques
 Pas de package NuGet, télécharger deux fichiers sur le repo GitHub
 Testable unitairement ? : pas de réponse à date
MAJ : Async pris en charge depuis peu (télécharger un fichier sur Github)
PetaPoco
 « Inspiré » de Massive, probablement un fork de ce dernier
 Compatible avec les bases de données :
 SQL Server, Oracle, SqlLite, PostgreSql, MySQL, FireBird
 Triple Syntaxe SQL, LINQ-Like et hybride LINQ / SQL
 Performances intéressantes
 Communauté active
 Pas d’obligation de créer une query AdHoc pour populer un objet (relations supportées)
 Supporte .Net Core, les transactions
 Insert, Update, Delete identiques à Massive
 Testable unitairement
 Obligation d’ajouter des attributs de mapping si on utilise des alias dans la requête SQL
 Pas d’Async
NPoco
 Fork de PetaPoco
 Même avantages de PetaPoco, avec des features additionnelles
 Mapping dans un objet existant possible
 Supporte les jeux de données multiples (comme EF, mais plus élégant)
 Async (mais pas toute les opérations)
 Et bien d’autres encore….
 Syntaxe quasiment identique, plus simple dans la plupart des cas
 Gestion des relations simplifiée
 Plus besoin d’attributs de mapping comme PetaPoco, les alias sont mieux pris en
charge
 Testable unitairement
 Moins populaire que PetaPoco, communauté moins active
OrmLite
 Développé par l’équipe ServiceStack
 Compatible avec plusieurs bases de données relationnelles:
 SQL Server, Oracle, Mysql, SqlLite, PostgreSql, FireBird, VistaDB
 Double Syntaxe LINQ-Like (élégante) et SQL
 API riche en fonctionnalités
 Communauté active
 Performances intéressantes
 Supporte .Net Core, les transactions, et le requêtes asynchrones
 Testable unitairement
 Obligation de créer une query AdHoc pour populer un objet (relations non
supportées)
Dapper
 Développé par l’équipe StackExchange
 Compatible avec plusieurs bases de données relationnelles:
 SQL Server, Oracle, Mysql, SqlLite, PostgreSql, FireBird
 API riche en fonctionnalités
 Communauté très active
 Performances très intéressantes (mapping le plus rapide)
 Supporte .Net Core, les transactions, et le requêtes asynchrones
 Relations supportées, mapper facile à utiliser pour populer les relations
 Insert, Update, Delete uniquement en query texte : un peu plus fastidieux à
écrire
 Testable unitairement, grandement facilité avec « DapperWrapper » et
« DapperParameters » pour unit tester les procédures stockées
Aperçu des performances
Select unique avec 500 enregistrements
Aperçu des performances
Select en boucle avec un enregistrement unique
Récapitulatif
Licence /
Installation
Prise en
main
Communauté, documentation,
maturité, Fréquence Maj
Performances Support
différentes Bdd
Support
.Net Core
Transactions Async Testabilité
EF Package Nuget
Massive Télécharger 2
fichiers
Dapper Package Nuget
Ormlite Package Nuget
SimpleData Package Nuget
PetaPoco Package Nuget
NPoco Package Nuget
- Ils supportent tous l’éxécution des procédures stockées, vues, fonctions
- Ils sont tous protégés des injection SQL (paramétrisation des requêtes)
Lesquels sortent du lot?
 NPoco pour la simplicité de sa syntaxe et ses performances
 Dapper pour ses performances exceptionnelles et sa communauté qui l’entoure
 OrmLite pour sa double syntaxe LINQ-like et SQL, et pour ses fonctionnalités
riches, et ses performances
Qu’en conclure ?
 Dapper est aujourd’hui le plus populaire pour ses performances exceptionnelles
 Ormlite et NPoco méritent aussi d’être adoptés
 Faut-il se séparer d’EntityFramework?
 Seul le futur le dira, mais si c’est uniquement pour une raison de performances on peut
en effet le supplanter par un micro ORM
 EntityFramework est plus facile à tester unitairement en mockant son DbContext
À surveiller….
 Simple.Data
 SqlFU
 Artisan ORM
 XPoco
 NReco
 Uni.Orm

Contenu connexe

Tendances

Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsMicrosoft
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Microsoft
 
Gab paris 2015 automatisation
Gab paris 2015   automatisationGab paris 2015   automatisation
Gab paris 2015 automatisationAymeric Weinbach
 
Déploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team ServicesDéploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team ServicesAdrien Siffermann
 
Premiers pas avec Microsoft Azure Search
Premiers pas avec Microsoft Azure SearchPremiers pas avec Microsoft Azure Search
Premiers pas avec Microsoft Azure SearchMCKLMT
 
Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)Quentin Frémeaux
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryMicrosoft
 
Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)Quentin Frémeaux
 
Cnam cours azure ze cloud intro et présentation generale 2016
Cnam cours azure ze cloud intro et présentation  generale 2016Cnam cours azure ze cloud intro et présentation  generale 2016
Cnam cours azure ze cloud intro et présentation generale 2016Aymeric Weinbach
 
Hi-Media Couchbase meetup Paris Nb #1
Hi-Media Couchbase meetup Paris Nb #1Hi-Media Couchbase meetup Paris Nb #1
Hi-Media Couchbase meetup Paris Nb #1Mickaël Le Baillif
 
REX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryREX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryDamien Goldenberg
 
Google Cloud Composer
Google Cloud ComposerGoogle Cloud Composer
Google Cloud ComposerPierre Coste
 
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !Publicis Sapient Engineering
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsFactoVia
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Microsoft
 
Meetup Docker Lyon janvier 2018 - Docker 101
Meetup Docker Lyon janvier 2018 - Docker 101Meetup Docker Lyon janvier 2018 - Docker 101
Meetup Docker Lyon janvier 2018 - Docker 101Emmanuel CARRE
 
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim RousseauXebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim RousseauPublicis Sapient Engineering
 

Tendances (19)

Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs Analytics
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
 
Gab paris 2015 automatisation
Gab paris 2015   automatisationGab paris 2015   automatisation
Gab paris 2015 automatisation
 
Déploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team ServicesDéploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team Services
 
Premiers pas avec Microsoft Azure Search
Premiers pas avec Microsoft Azure SearchPremiers pas avec Microsoft Azure Search
Premiers pas avec Microsoft Azure Search
 
Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site Recovery
 
Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)
 
Cnam cours azure ze cloud intro et présentation generale 2016
Cnam cours azure ze cloud intro et présentation  generale 2016Cnam cours azure ze cloud intro et présentation  generale 2016
Cnam cours azure ze cloud intro et présentation generale 2016
 
Hi-Media Couchbase meetup Paris Nb #1
Hi-Media Couchbase meetup Paris Nb #1Hi-Media Couchbase meetup Paris Nb #1
Hi-Media Couchbase meetup Paris Nb #1
 
REX Devops Docker
REX Devops DockerREX Devops Docker
REX Devops Docker
 
REX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryREX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous Delivery
 
Google Cloud Composer
Google Cloud ComposerGoogle Cloud Composer
Google Cloud Composer
 
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016
 
Windows server2016 presentation
Windows server2016 presentation Windows server2016 presentation
Windows server2016 presentation
 
Meetup Docker Lyon janvier 2018 - Docker 101
Meetup Docker Lyon janvier 2018 - Docker 101Meetup Docker Lyon janvier 2018 - Docker 101
Meetup Docker Lyon janvier 2018 - Docker 101
 
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim RousseauXebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
 

En vedette

Cathy Monier: Power Query et Power BI
Cathy Monier: Power Query et Power BICathy Monier: Power Query et Power BI
Cathy Monier: Power Query et Power BIMSDEVMTL
 
.Net Core Fall update
.Net Core Fall update.Net Core Fall update
.Net Core Fall updateMSDEVMTL
 
Introduction à la sécurité dans ASP.NET Core
Introduction à la sécurité dans ASP.NET CoreIntroduction à la sécurité dans ASP.NET Core
Introduction à la sécurité dans ASP.NET CoreMSDEVMTL
 
Ssis 2016 RC3
Ssis 2016 RC3Ssis 2016 RC3
Ssis 2016 RC3MSDEVMTL
 
2017 iosco research report on financial technologies (fintech)
2017 iosco research report on  financial technologies (fintech)2017 iosco research report on  financial technologies (fintech)
2017 iosco research report on financial technologies (fintech)Ian Beckett
 
Le Microsoft Graph et le développement Office 365
Le Microsoft Graph et le développement Office 365Le Microsoft Graph et le développement Office 365
Le Microsoft Graph et le développement Office 365MSDEVMTL
 
Introducing NoSQL and MongoDB to complement Relational Databases (AMIS SIG 14...
Introducing NoSQL and MongoDB to complement Relational Databases (AMIS SIG 14...Introducing NoSQL and MongoDB to complement Relational Databases (AMIS SIG 14...
Introducing NoSQL and MongoDB to complement Relational Databases (AMIS SIG 14...Lucas Jellema
 
Francis Paquet: Visualisations innovantes
Francis Paquet: Visualisations innovantesFrancis Paquet: Visualisations innovantes
Francis Paquet: Visualisations innovantesMSDEVMTL
 
SQL Server 2016 SSRS and BI
SQL Server 2016 SSRS and BISQL Server 2016 SSRS and BI
SQL Server 2016 SSRS and BIMSDEVMTL
 
Introduction à Application Insights
Introduction à Application InsightsIntroduction à Application Insights
Introduction à Application InsightsMSDEVMTL
 
Groupe Montreal Modern Excel and Power BI 2016 2017
Groupe Montreal Modern Excel and Power BI 2016 2017Groupe Montreal Modern Excel and Power BI 2016 2017
Groupe Montreal Modern Excel and Power BI 2016 2017MSDEVMTL
 
Advanced analytics with R and SQL
Advanced analytics with R and SQLAdvanced analytics with R and SQL
Advanced analytics with R and SQLMSDEVMTL
 
2015 Internet Trends Report
2015 Internet Trends Report2015 Internet Trends Report
2015 Internet Trends ReportIQbal KHan
 
Sophie Marchand: Cas power bi de a à z
Sophie Marchand: Cas power bi de a à zSophie Marchand: Cas power bi de a à z
Sophie Marchand: Cas power bi de a à zMSDEVMTL
 
Microsoft Modern Analytics
Microsoft Modern AnalyticsMicrosoft Modern Analytics
Microsoft Modern AnalyticsMSDEVMTL
 
Mongo db a deep dive of mongodb indexes
Mongo db  a deep dive of mongodb indexesMongo db  a deep dive of mongodb indexes
Mongo db a deep dive of mongodb indexesRajesh Kumar
 
Comparing 30 MongoDB operations with Oracle SQL statements
Comparing 30 MongoDB operations with Oracle SQL statementsComparing 30 MongoDB operations with Oracle SQL statements
Comparing 30 MongoDB operations with Oracle SQL statementsLucas Jellema
 
Tracxn Research - Healthcare Analytics Landscape, February 2017
Tracxn Research - Healthcare Analytics Landscape, February 2017Tracxn Research - Healthcare Analytics Landscape, February 2017
Tracxn Research - Healthcare Analytics Landscape, February 2017Tracxn
 
Tracxn Research - Insurance Tech Landscape, February 2017
Tracxn Research - Insurance Tech Landscape, February 2017Tracxn Research - Insurance Tech Landscape, February 2017
Tracxn Research - Insurance Tech Landscape, February 2017Tracxn
 
How ddd, cqrs and event sourcing constitute the architecture of the future
How ddd, cqrs and event sourcing constitute the architecture of the futureHow ddd, cqrs and event sourcing constitute the architecture of the future
How ddd, cqrs and event sourcing constitute the architecture of the futureMSDEVMTL
 

En vedette (20)

Cathy Monier: Power Query et Power BI
Cathy Monier: Power Query et Power BICathy Monier: Power Query et Power BI
Cathy Monier: Power Query et Power BI
 
.Net Core Fall update
.Net Core Fall update.Net Core Fall update
.Net Core Fall update
 
Introduction à la sécurité dans ASP.NET Core
Introduction à la sécurité dans ASP.NET CoreIntroduction à la sécurité dans ASP.NET Core
Introduction à la sécurité dans ASP.NET Core
 
Ssis 2016 RC3
Ssis 2016 RC3Ssis 2016 RC3
Ssis 2016 RC3
 
2017 iosco research report on financial technologies (fintech)
2017 iosco research report on  financial technologies (fintech)2017 iosco research report on  financial technologies (fintech)
2017 iosco research report on financial technologies (fintech)
 
Le Microsoft Graph et le développement Office 365
Le Microsoft Graph et le développement Office 365Le Microsoft Graph et le développement Office 365
Le Microsoft Graph et le développement Office 365
 
Introducing NoSQL and MongoDB to complement Relational Databases (AMIS SIG 14...
Introducing NoSQL and MongoDB to complement Relational Databases (AMIS SIG 14...Introducing NoSQL and MongoDB to complement Relational Databases (AMIS SIG 14...
Introducing NoSQL and MongoDB to complement Relational Databases (AMIS SIG 14...
 
Francis Paquet: Visualisations innovantes
Francis Paquet: Visualisations innovantesFrancis Paquet: Visualisations innovantes
Francis Paquet: Visualisations innovantes
 
SQL Server 2016 SSRS and BI
SQL Server 2016 SSRS and BISQL Server 2016 SSRS and BI
SQL Server 2016 SSRS and BI
 
Introduction à Application Insights
Introduction à Application InsightsIntroduction à Application Insights
Introduction à Application Insights
 
Groupe Montreal Modern Excel and Power BI 2016 2017
Groupe Montreal Modern Excel and Power BI 2016 2017Groupe Montreal Modern Excel and Power BI 2016 2017
Groupe Montreal Modern Excel and Power BI 2016 2017
 
Advanced analytics with R and SQL
Advanced analytics with R and SQLAdvanced analytics with R and SQL
Advanced analytics with R and SQL
 
2015 Internet Trends Report
2015 Internet Trends Report2015 Internet Trends Report
2015 Internet Trends Report
 
Sophie Marchand: Cas power bi de a à z
Sophie Marchand: Cas power bi de a à zSophie Marchand: Cas power bi de a à z
Sophie Marchand: Cas power bi de a à z
 
Microsoft Modern Analytics
Microsoft Modern AnalyticsMicrosoft Modern Analytics
Microsoft Modern Analytics
 
Mongo db a deep dive of mongodb indexes
Mongo db  a deep dive of mongodb indexesMongo db  a deep dive of mongodb indexes
Mongo db a deep dive of mongodb indexes
 
Comparing 30 MongoDB operations with Oracle SQL statements
Comparing 30 MongoDB operations with Oracle SQL statementsComparing 30 MongoDB operations with Oracle SQL statements
Comparing 30 MongoDB operations with Oracle SQL statements
 
Tracxn Research - Healthcare Analytics Landscape, February 2017
Tracxn Research - Healthcare Analytics Landscape, February 2017Tracxn Research - Healthcare Analytics Landscape, February 2017
Tracxn Research - Healthcare Analytics Landscape, February 2017
 
Tracxn Research - Insurance Tech Landscape, February 2017
Tracxn Research - Insurance Tech Landscape, February 2017Tracxn Research - Insurance Tech Landscape, February 2017
Tracxn Research - Insurance Tech Landscape, February 2017
 
How ddd, cqrs and event sourcing constitute the architecture of the future
How ddd, cqrs and event sourcing constitute the architecture of the futureHow ddd, cqrs and event sourcing constitute the architecture of the future
How ddd, cqrs and event sourcing constitute the architecture of the future
 

Similaire à Les micro orm, alternatives à entity framework

Entity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performancesEntity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performancesMSDEVMTL
 
SQL Server et les développeurs
SQL Server et les développeurs SQL Server et les développeurs
SQL Server et les développeurs Microsoft
 
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?Microsoft
 
Server Side Javascript in the cloud
Server Side Javascript in the cloudServer Side Javascript in the cloud
Server Side Javascript in the cloudstefounet
 
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?benjguin
 
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en ODataDe A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en ODataMicrosoft
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db firstZineb ELGARRAI
 
.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tousMicrosoft
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Environnements & Développements
Environnements & DéveloppementsEnvironnements & Développements
Environnements & DéveloppementsPaulin CHOUDJA
 
Cours services web_fabrice_mourlin
Cours services web_fabrice_mourlinCours services web_fabrice_mourlin
Cours services web_fabrice_mourlinangeeLee
 
Annexe1 éTude Comparative Sur Les Moteurs De Recherche
Annexe1   éTude Comparative Sur Les Moteurs De RechercheAnnexe1   éTude Comparative Sur Les Moteurs De Recherche
Annexe1 éTude Comparative Sur Les Moteurs De RechercheMohamed Ben Bouzid
 
Introduction au Domain Driven Design
Introduction au Domain Driven DesignIntroduction au Domain Driven Design
Introduction au Domain Driven DesignDNG Consulting
 
ASP.NET Core: Pourquoi, comment
ASP.NET Core:Pourquoi, commentASP.NET Core:Pourquoi, comment
ASP.NET Core: Pourquoi, commentArnaud Weil
 
Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]linasafaa
 
Du hard et des réseaux: Les outils pour construire l'internet des objets chez...
Du hard et des réseaux: Les outils pour construire l'internet des objets chez...Du hard et des réseaux: Les outils pour construire l'internet des objets chez...
Du hard et des réseaux: Les outils pour construire l'internet des objets chez...Microsoft
 

Similaire à Les micro orm, alternatives à entity framework (20)

Entity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performancesEntity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performances
 
SQL Server et les développeurs
SQL Server et les développeurs SQL Server et les développeurs
SQL Server et les développeurs
 
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?
 
Server Side Javascript in the cloud
Server Side Javascript in the cloudServer Side Javascript in the cloud
Server Side Javascript in the cloud
 
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?
 
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en ODataDe A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
 
.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous
 
Javavs net
Javavs netJavavs net
Javavs net
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Environnements & Développements
Environnements & DéveloppementsEnvironnements & Développements
Environnements & Développements
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Spring.NET
Spring.NETSpring.NET
Spring.NET
 
Cours services web_fabrice_mourlin
Cours services web_fabrice_mourlinCours services web_fabrice_mourlin
Cours services web_fabrice_mourlin
 
Annexe1 éTude Comparative Sur Les Moteurs De Recherche
Annexe1   éTude Comparative Sur Les Moteurs De RechercheAnnexe1   éTude Comparative Sur Les Moteurs De Recherche
Annexe1 éTude Comparative Sur Les Moteurs De Recherche
 
Introduction au Domain Driven Design
Introduction au Domain Driven DesignIntroduction au Domain Driven Design
Introduction au Domain Driven Design
 
ASP.NET Core: Pourquoi, comment
ASP.NET Core:Pourquoi, commentASP.NET Core:Pourquoi, comment
ASP.NET Core: Pourquoi, comment
 
Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]
 
Du hard et des réseaux: Les outils pour construire l'internet des objets chez...
Du hard et des réseaux: Les outils pour construire l'internet des objets chez...Du hard et des réseaux: Les outils pour construire l'internet des objets chez...
Du hard et des réseaux: Les outils pour construire l'internet des objets chez...
 

Plus de MSDEVMTL

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.netMSDEVMTL
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2MSDEVMTL
 
Property based testing
Property based testingProperty based testing
Property based testingMSDEVMTL
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureMSDEVMTL
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataMSDEVMTL
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new featuresMSDEVMTL
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3MSDEVMTL
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018MSDEVMTL
 
Api gateway
Api gatewayApi gateway
Api gatewayMSDEVMTL
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsMSDEVMTL
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureMSDEVMTL
 
Data science presentation
Data science presentationData science presentation
Data science presentationMSDEVMTL
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...MSDEVMTL
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreMSDEVMTL
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsMSDEVMTL
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageMSDEVMTL
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de casMSDEVMTL
 
Dan Edwards : Data visualization best practices with Power BI
Dan Edwards : Data visualization best practices with Power BIDan Edwards : Data visualization best practices with Power BI
Dan Edwards : Data visualization best practices with Power BIMSDEVMTL
 

Plus de MSDEVMTL (20)

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.net
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2
 
Property based testing
Property based testingProperty based testing
Property based testing
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft Azure
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & Data
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new features
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
 
Api gateway
Api gatewayApi gateway
Api gateway
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environments
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts Azure
 
Data science presentation
Data science presentationData science presentation
Data science presentation
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api core
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling Average
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de cas
 
Dan Edwards : Data visualization best practices with Power BI
Dan Edwards : Data visualization best practices with Power BIDan Edwards : Data visualization best practices with Power BI
Dan Edwards : Data visualization best practices with Power BI
 

Les micro orm, alternatives à entity framework

  • 1. Les Micro ORM, alternatives à Entity Framework Anthony Giretti Consultant sénior .NET chez Technologies NTER (Loto-Québec) http://anthonygiretti.com
  • 2. Introduction L'arrivée il y 10 ans d'Entity Framework a permis de requêter une base de données sans écrire une seule ligne de SQL. Ce qui a permis d’augmenter la productivité des développeurs. Entity Framework a apporté son lot d'avantages mais aussi d'inconvénients…….
  • 3. Avantage  Gain de productivité
  • 4. Inconvénients  Performances  Plus complexe qu’il en a l’air (LazyLoading, EagerLoading)  Nombreux bugs de mise à jour du modèle EDMX en mode Database First
  • 5. Les alternatives Aujourd'hui il existe différentes alternatives à ce dernier, les micro ORM. Nous allons voir en quoi ils sont intéressants :  Compatibilité avec les différentes bases de données relationnelles  Simplicité  Performance  Communauté autour de ces derniers
  • 6. Historique 2002 Entity Framework PetaPoco Apparition d’ADO.NET avec le Framework .NET 2009 20102003 2004 2005 2006 2007 2008 2011 2012 2013 2014 2015 2016 2017 Massive Dapper OrmLite Simple.Data SqlFu MicroLite NPoco Uni.Orm NReco Artisan Orm XPoco
  • 7. Origines de PetaPoco, NPoco et XPoco Massive (2011) PetaPoco (2011) NPoco (2012) XPoco (2017)
  • 9. Simple.Data  Syntaxe entièrement dynamique, conséquence : pas d'IntelliSense.  Compatible avec plusieurs bases de données :  SQL Server, Oracle, Mysql, SqlLite, PostgreSql, SqlAnyWhere, Informix Microsoft Access  Syntaxe peu compliquée (LINQ-like)  Supporte les transactions  Performances décevantes  Gestion de la connexion douteuse : « Simple.Data is quite aggressive in closing connections and holds no open connections to a data store by default, so you can keep the Database object returned from the Open*() methods hanging around without worrying.»  Obligation de créer une query AdHoc pour populer un objet (relations non supportées)  Non testable unitairement  Était Prometteur mais malheureusement il n’est plus mis à jour depuis 2013
  • 10. Massive  MicroOrm fournissant uniquement des données dynamiques  Compatible avec peu de bases de données relationelles: SQL Server, Oracle, SqlLite, PostgreSql  Double Syntaxe SQL et hybride LINQ / SQL  Fournit les commandes de base uniquement, syntaxe simpliste (pas de Join par exemple)  Performances intéressantes  Supporte les transactions  Obligation de créer une query AdHoc pour populer un objet (relations non supportées)  Obligation de faire hériter ses Pocos d’une classe nommée « DynamicModel »,  Mapper ses données dans un autre objet typé similaire ou se contenter de données dynamiques  Pas de package NuGet, télécharger deux fichiers sur le repo GitHub  Testable unitairement ? : pas de réponse à date MAJ : Async pris en charge depuis peu (télécharger un fichier sur Github)
  • 11. PetaPoco  « Inspiré » de Massive, probablement un fork de ce dernier  Compatible avec les bases de données :  SQL Server, Oracle, SqlLite, PostgreSql, MySQL, FireBird  Triple Syntaxe SQL, LINQ-Like et hybride LINQ / SQL  Performances intéressantes  Communauté active  Pas d’obligation de créer une query AdHoc pour populer un objet (relations supportées)  Supporte .Net Core, les transactions  Insert, Update, Delete identiques à Massive  Testable unitairement  Obligation d’ajouter des attributs de mapping si on utilise des alias dans la requête SQL  Pas d’Async
  • 12. NPoco  Fork de PetaPoco  Même avantages de PetaPoco, avec des features additionnelles  Mapping dans un objet existant possible  Supporte les jeux de données multiples (comme EF, mais plus élégant)  Async (mais pas toute les opérations)  Et bien d’autres encore….  Syntaxe quasiment identique, plus simple dans la plupart des cas  Gestion des relations simplifiée  Plus besoin d’attributs de mapping comme PetaPoco, les alias sont mieux pris en charge  Testable unitairement  Moins populaire que PetaPoco, communauté moins active
  • 13. OrmLite  Développé par l’équipe ServiceStack  Compatible avec plusieurs bases de données relationnelles:  SQL Server, Oracle, Mysql, SqlLite, PostgreSql, FireBird, VistaDB  Double Syntaxe LINQ-Like (élégante) et SQL  API riche en fonctionnalités  Communauté active  Performances intéressantes  Supporte .Net Core, les transactions, et le requêtes asynchrones  Testable unitairement  Obligation de créer une query AdHoc pour populer un objet (relations non supportées)
  • 14. Dapper  Développé par l’équipe StackExchange  Compatible avec plusieurs bases de données relationnelles:  SQL Server, Oracle, Mysql, SqlLite, PostgreSql, FireBird  API riche en fonctionnalités  Communauté très active  Performances très intéressantes (mapping le plus rapide)  Supporte .Net Core, les transactions, et le requêtes asynchrones  Relations supportées, mapper facile à utiliser pour populer les relations  Insert, Update, Delete uniquement en query texte : un peu plus fastidieux à écrire  Testable unitairement, grandement facilité avec « DapperWrapper » et « DapperParameters » pour unit tester les procédures stockées
  • 15. Aperçu des performances Select unique avec 500 enregistrements
  • 16. Aperçu des performances Select en boucle avec un enregistrement unique
  • 17. Récapitulatif Licence / Installation Prise en main Communauté, documentation, maturité, Fréquence Maj Performances Support différentes Bdd Support .Net Core Transactions Async Testabilité EF Package Nuget Massive Télécharger 2 fichiers Dapper Package Nuget Ormlite Package Nuget SimpleData Package Nuget PetaPoco Package Nuget NPoco Package Nuget - Ils supportent tous l’éxécution des procédures stockées, vues, fonctions - Ils sont tous protégés des injection SQL (paramétrisation des requêtes)
  • 18. Lesquels sortent du lot?  NPoco pour la simplicité de sa syntaxe et ses performances  Dapper pour ses performances exceptionnelles et sa communauté qui l’entoure  OrmLite pour sa double syntaxe LINQ-like et SQL, et pour ses fonctionnalités riches, et ses performances
  • 19. Qu’en conclure ?  Dapper est aujourd’hui le plus populaire pour ses performances exceptionnelles  Ormlite et NPoco méritent aussi d’être adoptés  Faut-il se séparer d’EntityFramework?  Seul le futur le dira, mais si c’est uniquement pour une raison de performances on peut en effet le supplanter par un micro ORM  EntityFramework est plus facile à tester unitairement en mockant son DbContext
  • 20. À surveiller….  Simple.Data  SqlFU  Artisan ORM  XPoco  NReco  Uni.Orm