Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

Post on 15-Apr-2017

545 views 1 download

Transcript of Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

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

30

ORM-Hate

http://martinfowler.com/bliki/OrmHate.html

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

98

EnityFramework raw SQL

99

NHibernate raw SQL

100

Спасибо за внимание!

Кожевников Дмитрийd.o.kozhevnikov@gmail.com