Post on 15-Apr-2017
Micro-ORM для жизни
Кожевников Дмитрий.NET DeveloperПАО Росбанк
2
Это я
• Кожевников Дмитрий• ПАО Росбанк (скоро AstroSoft)• .NET Enterprise 5 лет• Спикер dev2dev, dotnetconf, devday• d.o.kozhevnikov@gmail.ru
3
4
ORM
5
Пример - Сущность
6
ADO.NET Mapping
7
ADO.NET Mapping
8
ADO.NET Mapping
9
ADO.NET Mapping
10
ADO.NET Mapping
11
ADO.NET Mapping
12
ADO.NET Mapping
13
.Net ORM
14
Nuget-социология№ Package Downloads1 EntityFramework 6.1.3 2 414 6892 Nhibernate 3.3.3.4 (8.09.2013) 223 7633 Dapper 1.42 220 9964 Simple.Data 0.19.0 (10.12.2013) 46 6005 Linq2db 1.0.7.3 4 5126 NPoco 2.10.11 3 4187 OrmLite 4.0.52 2 196
15
Крутые пацаны
16
ADO.NET Mapping
17
ORM way (Entity Framework)
18
Entity Framework Context
19
Entity Framework Context
20
Entity Framework Context
21
Entity Framework Context
22
ORM way (Entity Framework)
23
EF SQL
24
ORM way (NHibernate)
25
NHibernate Configuration
26
NHibernate SQL
27
NHibernate constraints
28
Heavy-ORM features
• O/R Mapping• Генерация SQL• Object Model <= => DB Scheme• Ассоциации• Lazy Loading• Миграции• Change Tracking
29
Heavy ORM fails
• LINQ != SQL• Bulk insert, update, delete• Oracle Sequence, stored procedures• Analytical functions
31
Что делать?
• Расширение фреймворка• ADO.NET остров• Micro-orm (<= мне нравится это вариант)• NoSql
32
ORM-way Dapper
33
ORM-way Dapper
34
ORM-way Dapper
35
ORM-way Dapper
36
ORM-way Dapper
37
ORM-way Dapper
38
ORM-way Dapper
39
Dapper - Основные методы
40
Dapper - Запрос в объекты
41
Dapper - Запрос в объекты
42
Dapper - Запрос в объекты
43
Dapper - Запрос в объекты
44
Dapper Запрос ассоциаций
45
Dapper Запрос ассоциаций
46
Dapper Запрос ассоциаций
47
Dapper Запрос ассоциаций
48
Dapper Запрос ассоциаций
49
Dapper – QueryMultiple
50
Dapper – QueryMultiple
51
Dapper – QueryMultiple
52
Dapper – QueryMultiple
53
Dapper – QueryMultiple
54
Dapper – Bulk Insert
55
Dapper – Bulk Insert
56
Dapper – Bulk Insert
57
Dapper – Bulk Insert
58
Dapper – Bulk Insert
59
Dapper – Bulk Insert
60
Dapper – Bulk Insert
61
Dapper – Bulk Update\Delete
62
Итоги о Dapper
• Быстрый• SQL-ориентированный• Простой• Чистый O/R Mapping
63
64
Dapper - простой
• Простой API• Работа с IDbConnection, IDbTransaction• Convention over Configuration• Небольшой open-source проект
65
66
67
Dapper маппит запросы
68
Dapper маппит параметры
69
70
Dapper скромный
• Не скрывает БД• Не генерирует SQL• Не управляет соединениями• Не управляет транзакциями
71
Ниша
• Много мелких запросов• Сложные SQL запросы• Интеграционные решения• Приложение вторичные к БД• Демонстрационные приложения
72
О проблемах
• Генерация SQL• Трекинг изменений• Поддержка Linq
73
Экосистема Dapper
74
Генерация SQL
75
Dapper.Contrib
76
Dapper.Contrib Сущность
77
Dapper.Contrib Сущность
78
Dapper.Contrib Get<>()
79
Dapper.Contrib SQL
80
Dapper.Contrib ChangeTracking
81
Dapper.Contrib ChangeTracking
82
Dapper.Rainbow
83
Dapper.Rainbow
84
Dapper.Rainbow Database<T>
85
Dapper.Rainbow
86
Dapper.Rainbow Table<T>
87
Dapper.Rainbow Get<>()
88
Dapper.Rainbow SQL
89
90
SqlGun
91
Dapper совсем не против EF
92
Dapper.EntityFramework.Extenstions
93
Dapper.EntityFramework.Extenstions
94
Поддержка LINQ
95
Поддержка LINQ
96
Ссылки на исходные коды
• https://github.com/StackExchange/dapper-dot-net
• https://github.com/thiagoamarante/Dapper.EntityFramework.Extensions
97
Сравнения производительности• http://ppanyukov.github.io/2015/05/20/entity-framework-7-p
erformance.html• http://www.exceptionnotfound.net/dapper-vs-entity-framew
ork-vs-ado-net-performance-benchmarking/• http://www.dontpaniclabs.com/blog/post/2014/05/01/speed
-comparison-dapper-vs-entity-framework/
98
EnityFramework raw SQL
99
NHibernate raw SQL
100
Спасибо за внимание!
Кожевников Дмитрийd.o.kozhevnikov@gmail.com