Object Relational Mapping with Dapper (Micro ORM)

muhammadumar600 2,450 views 35 slides Mar 15, 2016
Slide 1
Slide 1 of 35
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35

About This Presentation

Object relational mapping (ORM) is modern technique used to make incompatible type systems collaborate. Dapper is a micro ORM, specially known for its efficiency and simplicity.


Slide Content

Welcome Everyone!

Today's Topic
Object Relational Mapping
with Dapper (a micro ORM)

Road map
Application Architecture

Databases

ORM

Dapper

Web App Architecture

Databases
(A quick overview)

Types of Databases
●Relational Database Management Systems (RDBMS)
●NoSQL and Object-Oriented (OODBMS)

RDBMS
Data Storage
–Rows and columns (Tabular Form)
Features
–Simple, better performance of managing data
–Mathematical foundation (Relational Algebra)
–Flattening and scattering -> unnatural
–Limitations: everything doesn't fit in relations
–Conversion needed (impedance mismatch)

NoSQL and OODBMS
Data Storage
–Object Form
Features
–No conversion needed (no impedance mismatch)
–Relationships are directly represented, rather than requiring
join tables/operations
–Better at modeling complex objects
–No mathematical foundation
–Don’t have maturity of RDBMS yet

Incompatible Type Systems
●During systems collaboration if systems found having
different type systems, they are said to be Incompatible
Type Systems and can't interact with each other without an
interface. E.g. OO Applications and RDBMS.
●A mechanism/solution is needed to overcome this
incompatibility gap for proper collaboration.

Solution for Incompatibility?

What is an ORM?
●It is a programming technique for converting data between
incompatible type systems in object-oriented programming
languages.

Why to use ORM?
●Many popular database products such as structured query
language database management systems (SQL DBMS) can
only store and manipulate scalar values such as integers
and strings organized within tables. The programmer must
convert the object values for storage in the database into
groups of simpler values (and convert them back upon
retrieval).
●For most of the data-access code that developers usually
need to write, it eliminates.

Problems with ORM
●Object-Relational Impedance Mismatch (paradigm
mismatch) is a way of saying that object models and
relational models do not work very well together. Loading
and storing graphs of objects using a tabular relational
database exposes 5 mismatch problems.
–Granularity
–Subtypes (inheritance)
–Identity
–Associations
–Data navigation

Types of ORM
●Entity-based relational mapping
–Change tracking, Lazy-loading, Eager fetching, Cascades, Identity map, Unit of work
tracking
●Result-set-based relational mapping
–Map straight to DTOs and skip needing to configure mapping
●DML-based relational mapping (micro ORMs)
–SQL is brought to the forefront, mapping on the fly and only need a connection
●Bulk loading tools
– Limited to INSERT and SELECT

Boring???

Dapper
(A micro ORM)

Why Dapper ?
●Simple object mapper for .Net
●Performance is a key feature

Why Dapper is Simple/ Lightweight?
●Many feature that ORMs ship with are stripped out, there is
no identity map, there are no helpers for update/select
and so on.
●Dapper does not manage your connection's life cycle, it
assumes the connection it gets is open AND has no existing
data readers enumerating.

Dapper Performance Measures?

Dapper in Action

Dapper in Action
●Dapper is a “single file” (SqlMapper.cs) that will extend
your IDbConnection interface.
●It provides 3 helpers:
–Execute a query and map the results to a strongly typed
List
–Execute a query and map it to a list of dynamic objects
–Execute a Command that returns no results

(1) Query with Strongly Typed Result

(2) Query with Dynamic Object Result

(3) Command with No Result

Execute a Command multiple times

Execute a Stored Procedure

Multiple Results in Single Query

Limitations of Dapper?
●Many feature that ORMs ship with are stripped out, there is
no identity map, there are no helpers for update/select and
so on.
●Dapper does not manage your connection's life cycle, it
assumes the connection it gets is open.

Final words on Dapper
(Finally towards ending!)

Configurations (Most hectic activity)?
Surprisingly!!! No configuration needed in project, just add
reference to the library and you are done.
–Reasons
●It uses existing db connection (extends IDbConnection).
●It just does object mapping, nothing else as mentioned in
features.

Applications
●Stack Overflow
●Helpdesk
●And many more

Dapper and DB providers
●Dapper has no DB specific implementation details, it works
across all .Net ADO providers including sqlite, sqlce,
firebird, oracle, MySQL, PostgreSQL and SQL Server.

Conclusion
●Simple and lightweight to implement / use.
●Provide enough helpers/ support to do ORM activities.
●Doesn't suppress developers SQL skills.

Recommendation (Hybrid Approach)
●Dapper was written with speed (not features) as a priority.
●Using Dapper felt like writing SQL, which majority of developers
avoid when possible.
●For Entity Framework slowness issue, replace queries with
either a view or a stored procedure, depending on the
situation.
●Hybrid approach: Use EF for normal cases due to ease and use
Dapper where performance boost in needed.

References
●http://en.wikipedia.org/wiki/Object-relational_mapping
●http://hibernate.org/orm/what-is-an-orm/
●https://github.com/StackExchange/dapper-dot-net
●https://www.cl.cam.ac.uk/~fms27/db/tr-98-2.pdf
●http://searchcio.techtarget.com/opinion/Relational-databases-are-far-from-dead-just-ask-Facebook
●https://www.quora.com/What-is-LinkedIn-s-database-architecture-like
●http://www.infoq.com/news/2010/08/linkedin-data-infrastructure
●http://blog.dontpaniclabs.com/post/2014/05/01/Speed-Comparison-Dapper-vs-Entity-Framework
●http://lostechies.com/jimmybogard/2012/07/20/choosing-an-orm-strategy/
●http://forums.asp.net/t/1792276.aspx?which+is+better+to+use+dapper+or+entity