1
00:00:01,000 --> 00:00:04,759
How'd you like to listen to dot
net rocks with no ads? Easy?

2
00:00:05,320 --> 00:00:09,880
Become a patron For just five dollars
a month you get access to a private

3
00:00:10,000 --> 00:00:14,400
RSS feed where all the shows have
no ADS. Twenty dollars a month will

4
00:00:14,400 --> 00:00:18,800
get you that and a special dot
net Rocks patron mug. Sign up now

5
00:00:18,839 --> 00:00:24,199
at Patreon dot dot net rocks dot
com. Hey Carlin Richard here. As

6
00:00:24,239 --> 00:00:29,519
you may have heard, NDC is
back offering their incredible in person conferences around

7
00:00:29,559 --> 00:00:33,320
the world, and we'd like to
tell you about them. NDC Oslow will

8
00:00:33,359 --> 00:00:37,119
be me twenty first through the twenty
fifth. Go to NDC Oslo dot com

9
00:00:37,159 --> 00:00:42,840
to register. NDC Copenhagen is happening
August twenty seventh through the thirty first.

10
00:00:42,880 --> 00:00:48,880
The early bird discount for NDC Copenhagen
ends June second. Go to NDC Copenhagen

11
00:00:48,960 --> 00:00:54,719
dot com for more information. NDC
Porto is happening October sixteenth through the twentieth.

12
00:00:54,920 --> 00:00:59,000
The early bird discount for DC Porto
ends July twenty first. Go to

13
00:00:59,079 --> 00:01:03,840
EDDC Porto Do calm to register and
check out the full lineup of conferences at

14
00:01:03,960 --> 00:01:21,799
NDC Conferences dot com. Welcome back
to dot Net Rocks. This is Carl

15
00:01:21,879 --> 00:01:26,680
Franklin and this is Richard Campbell in
our respective corners of North America. How

16
00:01:26,640 --> 00:01:30,439
are you doing, buddy? What's
up? Raining? Lots of rain?

17
00:01:30,719 --> 00:01:34,120
Oh you know, at least it's
not freezing. No, it's not freezing

18
00:01:34,159 --> 00:01:38,680
anymore, warmed up. Yeah,
but yeah, you know it's spring season.

19
00:01:38,840 --> 00:01:40,599
How the bears come out yet?
Oh? Yeah, no, the

20
00:01:40,599 --> 00:01:44,400
bears are around, no question.
We've actually had a full size mountain lion

21
00:01:44,920 --> 00:01:49,200
wandering around, evading fish and wildlife
quite successfully, because they really don't like

22
00:01:49,400 --> 00:01:53,599
having ninety pound cats walking around the
neighborhood. But yeah, yeah, I've

23
00:01:53,599 --> 00:01:59,400
got a good shot of her headed
back into the backyard and into the forest

24
00:01:59,439 --> 00:02:01,599
behind me. But plenty of other
neighbors gotten shots of her as well.

25
00:02:01,719 --> 00:02:08,199
So you know that story about Roy
Rogers and Dale Evans. Dale Evans got

26
00:02:08,280 --> 00:02:15,120
Roy Rogers a new pair of boots
for Easter, and he went out hunting

27
00:02:15,639 --> 00:02:20,199
and he comes across this mountain line
which jumped at him, and he pulled

28
00:02:20,199 --> 00:02:24,159
out his pistol and shot it dead. And but before before the cat died,

29
00:02:24,159 --> 00:02:29,479
it just completely you know, fought. He had to fight it off,

30
00:02:29,639 --> 00:02:35,120
right, and and it tore the
crap out of his boots, so

31
00:02:35,280 --> 00:02:39,240
he slings it over his back and
he comes walking up the lane way and

32
00:02:39,400 --> 00:02:43,199
Dale Evans is on the porch and
she says, part of me, Roy,

33
00:02:43,520 --> 00:02:46,599
is that the cat that cheered your
new shoes. Oh man, that

34
00:02:46,759 --> 00:02:54,000
was a long way to go.
Oh boy. Okay, well, anyway,

35
00:02:54,039 --> 00:03:07,960
let's start start to show. We'd
better know framework this being episode eighteen

36
00:03:07,080 --> 00:03:10,800
forty five. If you go to
eighteen forty five dot pwop dot me,

37
00:03:12,840 --> 00:03:19,759
you will see a tweet from one
McKay Wrigley and he says, Jarvis is

38
00:03:19,800 --> 00:03:27,240
now reality. My GPT four coding
assistant can now build and deploy brand new

39
00:03:27,280 --> 00:03:31,879
web apps. It initializes my project, builds my app, creates a GitHub

40
00:03:31,919 --> 00:03:38,039
repo, and deploys it to versell
all from simply using my voice. Cool,

41
00:03:38,280 --> 00:03:45,879
and he's got a video there And
I just thought this was really telling.

42
00:03:45,919 --> 00:03:49,680
And I remember, do you?
You probably may or may not remember

43
00:03:49,680 --> 00:03:53,479
this because this might have been before
you, but we were talking about automation

44
00:03:53,520 --> 00:03:57,199
and everything, and I was saying, you know, someday you'll be able

45
00:03:57,240 --> 00:04:00,280
to just walk up to a computer
and have a conversation with it in regular

46
00:04:00,360 --> 00:04:08,520
language, and it will spit out
a fully functional business logic included app or

47
00:04:08,560 --> 00:04:13,159
whatever. And whoever was on the
line that day said, nah, that's

48
00:04:13,199 --> 00:04:16,480
that's not going to happen. That'll
never happen. And I don't know that

49
00:04:16,519 --> 00:04:19,160
it has happened, you know,
I don't know that it has either.

50
00:04:19,279 --> 00:04:24,839
But air quotes fully functional. Like
near as I can tell, you've managed

51
00:04:24,839 --> 00:04:29,720
to build a DevOps You put a
chat interface on top of a DevOps engine.

52
00:04:29,759 --> 00:04:31,759
Okay, So are you saying that
this is never going to happen?

53
00:04:32,000 --> 00:04:38,560
I think nevers a funny word,
right, nice edge. Well, eventually

54
00:04:38,560 --> 00:04:42,680
the sun expands and incinerates the planet
too, So right, what context do

55
00:04:42,720 --> 00:04:46,040
you want never in? Okay?
How about in our lifetime? Do you

56
00:04:46,040 --> 00:04:49,720
think some of you able to walk
up to a computer have a conversation,

57
00:04:50,040 --> 00:04:54,439
you know, have the things say
okay, what happens when they press this

58
00:04:54,480 --> 00:04:59,839
button and you say it and then
it spits out let's say, ninety percent

59
00:05:00,079 --> 00:05:03,680
to a completed application. Yeah,
we've already had that technology in our lifetime.

60
00:05:03,879 --> 00:05:06,480
It's just a question of was it
good enough? Because it's also a

61
00:05:06,519 --> 00:05:11,360
moving goalpost, right right, once
upon a time, as long as it

62
00:05:11,399 --> 00:05:15,040
rendered eighty by twenty five texting a
green screen. It was good enough.

63
00:05:15,360 --> 00:05:18,000
Yeah, right now, I expect
it to be on a phone, on

64
00:05:18,040 --> 00:05:21,160
a tablet, on a PC,
works in the cloud, works at home.

65
00:05:21,279 --> 00:05:27,800
Like, expectations keep shifting, so
as long as that momentum is maintained,

66
00:05:27,879 --> 00:05:30,480
and one would argue we've been stuck
in the same form factors for quite

67
00:05:30,519 --> 00:05:34,560
a while now, Yeah, I
guess it also depends on the you know,

68
00:05:34,639 --> 00:05:40,639
the nature of the app. Right. If it's just forms over data,

69
00:05:40,839 --> 00:05:43,959
I can see that happening. But
if it's you know, got something

70
00:05:44,000 --> 00:05:47,040
that you need to hire a CSS
guru for because it has to be pixel

71
00:05:47,079 --> 00:05:49,920
perfect, that's going to be hard. It depends on what the visualizations are.

72
00:05:50,160 --> 00:05:53,319
Yeah, it's going to be hard
to describe it. But look at

73
00:05:53,360 --> 00:05:57,560
the chat interface on top of Power
platform for forms over data, that where

74
00:05:57,600 --> 00:06:00,360
you can describe your intent. Yeah, yeah, that's pretty cool. Yeah,

75
00:06:00,439 --> 00:06:02,839
no, it's very exciting. Well
anyway, that's when I got we

76
00:06:02,879 --> 00:06:05,800
are very much in a hype cycle
right now. Friendly, Yes we are,

77
00:06:06,000 --> 00:06:09,360
Yes, we are, all right. So I was talking to us

78
00:06:09,360 --> 00:06:12,800
today. I grabbed a comment off
of show fifteen sixty six, so I'm

79
00:06:12,839 --> 00:06:15,879
going back a bit. That's the
show we did in July of twenty eighteen

80
00:06:15,879 --> 00:06:19,920
with Corey House talking about graphs Quel, although we didn't talk a fair bit

81
00:06:19,920 --> 00:06:25,319
of any framework in relationship, it's
too graph ql. And this particular comment

82
00:06:25,319 --> 00:06:28,600
comes from Mike Bateman who said,
hey guys, long time listener, first

83
00:06:28,600 --> 00:06:32,000
comment, and we only waited six
years to read it five. I work

84
00:06:32,079 --> 00:06:35,519
for a big company building APIs where
we do rest but not all the verbs.

85
00:06:35,759 --> 00:06:41,000
Nobody does all the verbs, O
data and a little blend of both.

86
00:06:41,120 --> 00:06:44,120
I love this episode. It dug
into issues we face as API builders

87
00:06:44,160 --> 00:06:46,560
and consumers. I'm glad that O
data has been talked about again, as

88
00:06:46,600 --> 00:06:49,279
we been using it for years,
both internally and externally. And my first

89
00:06:49,279 --> 00:06:53,120
impressions of graphql I thought it was
a rip off of O data, which

90
00:06:53,240 --> 00:06:56,480
is not that other thing. However, as I dug into the detail of

91
00:06:56,560 --> 00:07:00,279
graph QLL, I found it to
be more mature, better supported. UI

92
00:07:00,319 --> 00:07:03,279
tooling is a massive help. The
notification of description feature caught my attention to

93
00:07:03,399 --> 00:07:06,839
and this is five years ago.
You know, graph QLs improved since then.

94
00:07:08,160 --> 00:07:11,639
We have lots of sequel databases and
any framework models coated up and using

95
00:07:11,680 --> 00:07:16,079
graphql dot Net library which made building
graph qul service is much quicker and easier

96
00:07:16,079 --> 00:07:20,560
than o data and as for depth
and intense quarrying issues, those existed no

97
00:07:20,720 --> 00:07:25,199
data two. We were hit on
a Saturday afternoon with some crazy od data

98
00:07:25,240 --> 00:07:30,199
queries that actually took down our sequel
servers. Always on a Saturday after right,

99
00:07:30,680 --> 00:07:34,639
and that's the way that works.
I'm sad that o data wasn't endorsed

100
00:07:34,639 --> 00:07:39,120
as much as graphql when it first
came out, but I'm glad graph qul

101
00:07:39,240 --> 00:07:42,480
is here. I'm gonna encourage our
fellow dot net devs to consider it when

102
00:07:42,519 --> 00:07:46,720
building an API. Xmel yea,
no, thanks, no, thanks,

103
00:07:46,800 --> 00:07:49,759
Jason, Yes, please more of
that. Please, it's great work and

104
00:07:49,879 --> 00:07:53,319
keep it up. Oh, great
work to you too, Mike. Sorry

105
00:07:53,319 --> 00:07:56,120
it took me five years reread it
is gone because it's awesome. Yeah,

106
00:07:57,480 --> 00:08:01,920
yeah, and yeah it Isn't it
fascinating how data is evolved and the way

107
00:08:01,920 --> 00:08:05,079
we're working these days, although it
seems pretty stable at the moment, like

108
00:08:05,120 --> 00:08:07,879
we've got a good stack running with
us, and props to Doug Crocfrot totally.

109
00:08:09,040 --> 00:08:11,160
Yeah. So, Mike, thank
you so much for comment. And

110
00:08:11,199 --> 00:08:13,360
a copy of music Code Buy is
on its way to you, and if

111
00:08:13,360 --> 00:08:16,560
you'd like a copy of music codey
I read a comment on the website dot

112
00:08:16,680 --> 00:08:18,600
at rocks dot com or on the
facebooks. We read every one of them

113
00:08:18,720 --> 00:08:22,360
and we comment on a few,
and when we read that comment, I'll

114
00:08:22,360 --> 00:08:24,560
send you a copy of music.
Go buy hey, and definitely follow us

115
00:08:24,560 --> 00:08:28,839
on Twitter. That's all fine and
good, but you should think about following

116
00:08:28,920 --> 00:08:33,840
us on mastadon because that's where the
fun is happening these days. I'm at

117
00:08:33,960 --> 00:08:37,679
Carl Franklin at tech hub dot social
and I'm at Rich Campbell at mastodon dot

118
00:08:37,720 --> 00:08:43,360
social. Send us a tute.
We like getting them. And you know,

119
00:08:43,519 --> 00:08:46,639
if you send us a tute that's
a comment on the show, we'll

120
00:08:46,679 --> 00:08:50,919
read it, just like we do
when you posted on facebooks and all that

121
00:08:50,960 --> 00:08:54,120
other stuff. Right, absolutely,
all right, And with that, let

122
00:08:54,159 --> 00:08:58,480
me try to pronounce Eric's last name
and middle name and not screw it up.

123
00:09:00,600 --> 00:09:05,360
Eric's SkELL Jansen. How's that perfect? All right? He is a

124
00:09:05,399 --> 00:09:11,759
principal consultant at Delegate As He maintains
a number of open source data access tools

125
00:09:11,759 --> 00:09:18,120
and libraries, including ef core power
tools and sequel like Toolbox for Visual Studio

126
00:09:18,639 --> 00:09:26,600
and Multiple Entity Framework providers. He's
been awarded Microsoft MVP fourteen times and enjoys

127
00:09:26,679 --> 00:09:30,840
running comic books and walking his dog. So do you run the comic books

128
00:09:30,840 --> 00:09:33,960
and walk the dog or do you
walk the comic books and run the dog.

129
00:09:37,519 --> 00:09:43,480
There's a comma there, I'm sorry, Leaves. Yeah, let's see

130
00:09:43,519 --> 00:09:48,399
grandma enough, Maybe I'm mast comma. Yes, thank you, Yeah,

131
00:09:48,399 --> 00:09:52,919
welcome to dot net rocks. It's
great to have you. Recently, I

132
00:09:52,960 --> 00:09:58,399
brought up entity framework as being I
made a joke about it being a rapper

133
00:09:58,519 --> 00:10:03,559
around some exception or something like that, and when and only because I have

134
00:10:03,600 --> 00:10:07,080
a little pain with and the framework, and I'm hoping that you might be

135
00:10:07,120 --> 00:10:11,679
able to help me answer the question
that I have. But I'll get to

136
00:10:11,720 --> 00:10:16,600
that a little bit later. First, why don't you introduce yourself and tell

137
00:10:16,679 --> 00:10:20,240
us about what you've been working unlately. Yeah, my name is as you

138
00:10:20,279 --> 00:10:28,200
said, and I work as a
consultant and create apps in usually custom apps

139
00:10:28,559 --> 00:10:35,399
running in as your cloud based on
native app services, and I frequently use

140
00:10:35,679 --> 00:10:41,720
a sequel server for those apps.
It's believe it or not, it's actually

141
00:10:41,720 --> 00:10:46,600
something that's still in use. Is
everywhere. Man's never going away, I

142
00:10:46,679 --> 00:10:52,159
doubt it, and that's quite a
good offering called as a sequel database,

143
00:10:52,240 --> 00:10:58,000
which is everything is completely managed for
you. You don't need to do backups,

144
00:10:58,039 --> 00:11:01,320
you don't need to worry about high
available because everything is already available in

145
00:11:03,080 --> 00:11:07,879
three copies, even for the for
the cheapest stock keeping units and so on.

146
00:11:07,240 --> 00:11:11,960
I've actually taken advantage of that before
UM where you know it's like damn,

147
00:11:11,960 --> 00:11:16,200
I really need a backup of this
database. Hey wait a minute,

148
00:11:16,320 --> 00:11:22,679
there, don't don't go looking.
Yeah so yeah, so, And I

149
00:11:22,840 --> 00:11:30,000
often I like to be productive when
I when I develop as well, and

150
00:11:30,080 --> 00:11:35,240
I think ef core, UM entity
framor core can really help in that respect.

151
00:11:35,320 --> 00:11:37,840
And I have for the benefit of
myself and in order to be even

152
00:11:37,879 --> 00:11:43,200
more productive, but also to help
others, I have published some tools and

153
00:11:43,279 --> 00:11:48,879
some libraries to to help developers be
more productive, for example e of core

154
00:11:48,919 --> 00:11:54,720
power tools. So so, when
ef core was initiated together with dot net

155
00:11:54,799 --> 00:12:00,879
core back in the day, I
think that was like two thousand in seventeen

156
00:12:01,039 --> 00:12:07,679
sixteen. Round that time, the
team didn't work on any graphical tooling because

157
00:12:09,440 --> 00:12:16,440
it was cross platform, so the
effort was spent on on the run time

158
00:12:16,600 --> 00:12:24,480
and performance optimization and not on graphical
tools for a particular platform, like Missile

159
00:12:24,519 --> 00:12:30,120
Studio on Windows, for example.
So I grabbed that opportunity to publish IF

160
00:12:30,159 --> 00:12:35,240
core power tools in agreement with the
courteen because they didn't want to have anything

161
00:12:35,240 --> 00:12:43,000
to do with it. And it
actually makes makes you able to very quickly

162
00:12:43,120 --> 00:12:52,240
start using your database, your existing
database with ef cores by scaffolding the necessary

163
00:12:52,279 --> 00:12:56,399
classes and dB context mappings and so
on, so so you can in a

164
00:12:56,440 --> 00:13:01,159
stronger type fashion, can communicate with
your database from c shop. This was

165
00:13:01,200 --> 00:13:07,440
obviously before that stuff was built Individual
studio. Yeah, it's like in for

166
00:13:07,600 --> 00:13:11,480
the IF six classic, if you
wish that was you could create an idio

167
00:13:11,519 --> 00:13:16,840
mix in visual Studio. But I
mean that was also very much bound to

168
00:13:16,240 --> 00:13:24,039
Visual Studio and Windows and that whole
infrastructure West dot net core was really aimed

169
00:13:24,080 --> 00:13:28,080
at being cross platform, of course, and addressing so we should be able

170
00:13:28,080 --> 00:13:33,519
to run on one all kind of
other operating systems like Linux and Mac and

171
00:13:33,559 --> 00:13:37,840
so on. And I know it's
a little bit crazy, but they actually

172
00:13:37,840 --> 00:13:41,320
open sourced entity framework before dot net
core, I know, I know,

173
00:13:41,519 --> 00:13:46,720
and and actually contributed to that as
well at that time. And I think,

174
00:13:46,919 --> 00:13:50,960
I mean, I'm not sure.
It was the first project that Microsoft

175
00:13:50,039 --> 00:13:54,360
really where they really embraced open source. I think it was a open source

176
00:13:54,399 --> 00:14:01,960
at the same time as ESPNT for
something, but they really embraced open source

177
00:14:01,039 --> 00:14:05,279
in a in a in a good
way. It was one on something called

178
00:14:05,360 --> 00:14:09,759
cooplex. Yeah, remember, which
was before get back exactly back in the

179
00:14:09,919 --> 00:14:18,279
day. But but yes, but
the team was really open to towards contributions

180
00:14:18,360 --> 00:14:24,120
from from computer community members and was
really helpful in providing guidance on how do

181
00:14:24,159 --> 00:14:28,240
I do this, because it's like
they were using some weird source control system.

182
00:14:28,279 --> 00:14:31,679
It wasn't I can't remember now.
It was their own internal one and

183
00:14:31,759 --> 00:14:37,200
it was bizarre. Yeah, exactly. It was like like homemade pre gets

184
00:14:37,200 --> 00:14:41,840
something well, and and GitHub was
the product that was the space that learned

185
00:14:41,840 --> 00:14:46,200
how to take contributors from externals and
so forth. So when they were doing

186
00:14:46,200 --> 00:14:50,840
this or coplex, there really was
no mechanism for that, Like if you

187
00:14:50,879 --> 00:14:54,480
were part of that. That's a
great story too, because they were most

188
00:14:54,559 --> 00:14:58,320
people that most of the groups that
posted stuff on the coplex, they were

189
00:14:58,519 --> 00:15:01,840
building it internally and then we're just
sort of pushing the thing up the CodePlex

190
00:15:01,879 --> 00:15:03,919
to take feedback. Yeah, they
were never really trying to get code from

191
00:15:03,919 --> 00:15:07,480
that, but you actually we're trying
to contribute back then. Actually somehow,

192
00:15:07,960 --> 00:15:11,639
Yeah, I was struggling, but
somehow I managed to contribute. Yeah,

193
00:15:11,639 --> 00:15:16,879
it's awesome. Yeah. Did you
contribute to the code that we run now,

194
00:15:16,960 --> 00:15:22,120
the di scaffolding for Enity framework.
I have contributed to the code that

195
00:15:22,200 --> 00:15:26,120
is running today, the scaffolding for
interfaming and other features, but in particularly

196
00:15:26,159 --> 00:15:31,919
the scaffolding code I have contributed to
because that is the basis I use for

197
00:15:31,000 --> 00:15:35,360
the visual tooling. That visual tools
tooling is built on top of that.

198
00:15:35,720 --> 00:15:39,840
Wow. Of course I didn't didn't
want to have to reinvent the wheel.

199
00:15:41,200 --> 00:15:46,879
And the basic framework provides like each
provider, Like a provider is something that

200
00:15:46,919 --> 00:15:52,440
advises a particular database system like Sequel
Light, Sequel Server as a sequel,

201
00:15:52,519 --> 00:15:58,159
and the post quest and the Oracle
whatever, and they each have the application

202
00:15:58,279 --> 00:16:03,360
to provide a model that describes the
structure of a of a database that you

203
00:16:03,440 --> 00:16:08,879
pointed to. And so there's a
common API for consuming a description of what

204
00:16:08,919 --> 00:16:15,039
the database schema looks like. Wow. So so each provider already supplies that

205
00:16:15,519 --> 00:16:23,159
metadata mechanism and of course I'm I'm
not. I don't want to reinvent anything

206
00:16:23,240 --> 00:16:30,759
basically, so so I'm using all
those mechanisms that are built into the framework

207
00:16:32,559 --> 00:16:34,639
and building on top of that.
To me, what was important about what

208
00:16:34,759 --> 00:16:40,519
became Entity framework ord the open source
version of any framework, is that it's

209
00:16:40,639 --> 00:16:45,840
essentially the first time that Microsoft a
Microsoft team took an existing closed source property

210
00:16:47,840 --> 00:16:52,440
and made an open source version from
it, which seems impossible, like from

211
00:16:52,440 --> 00:16:56,679
the inside. When they succeeded at
that, it wasn't. It was the

212
00:16:56,720 --> 00:17:02,799
most important piece of code is that
it was a mechanism that didn't wasn't believed

213
00:17:02,840 --> 00:17:07,039
to be possible because you know,
a normal way that Microsoft builds code is

214
00:17:07,039 --> 00:17:10,640
they're covering it in patents all the
time. Every time you finish a feature,

215
00:17:11,240 --> 00:17:12,640
you know, as a developer,
you're basically sitting with a lawyer going

216
00:17:12,640 --> 00:17:15,599
through which you built and saying,
is there a patent here? And you

217
00:17:15,680 --> 00:17:19,160
get bonuses based on how many little
cubes you get for getting patents? Right,

218
00:17:19,200 --> 00:17:22,200
Yeah, can you not open source
patented code only if you release the

219
00:17:22,200 --> 00:17:27,920
patents, you're basically junking the patents
forgetting about the patents. Wow? Yeah,

220
00:17:27,960 --> 00:17:33,599
And so to open source entity framework. They unwound those in a variety

221
00:17:33,640 --> 00:17:37,039
of ways. And should I ever
finish this book and not actually die first

222
00:17:38,960 --> 00:17:42,799
all the things they did is kind
of madness, but it was profoundly to

223
00:17:42,880 --> 00:17:45,559
me. It was profoundly important.
But not so much again, not that

224
00:17:45,640 --> 00:17:49,880
they did it, but that the
affected had on the rest of the company.

225
00:17:49,839 --> 00:17:53,079
Yeah, because the rest of the
company was then suddenly you were allowed

226
00:17:53,599 --> 00:18:00,319
to consider the idea of taking existing
code and open source again, or that

227
00:18:00,400 --> 00:18:03,519
it never think it's ever been done. I think about Scott Guthrie, who

228
00:18:03,599 --> 00:18:08,400
championed the open source stuff in the
cloud, and all of the patents in

229
00:18:08,440 --> 00:18:11,599
his office. You've seen them,
right, I mean they're hanging on the

230
00:18:11,640 --> 00:18:15,640
walls, they're in trophies and stuff. He's got like one hundred patents or

231
00:18:15,680 --> 00:18:22,119
something or more, well more,
but plenty of azure Stool still closed source,

232
00:18:22,240 --> 00:18:23,400
right, There's only certain things that
are. I think we can assume

233
00:18:23,440 --> 00:18:29,319
that quite big parts of a still
close source. Yea very much. Yeah,

234
00:18:29,440 --> 00:18:33,000
but but yeah, and the real
answer to open sourcing dot Net was

235
00:18:33,079 --> 00:18:37,640
to rewrite dot net. Yeah yeah, yeah, So the patterns may apply

236
00:18:37,160 --> 00:18:41,880
to the old codebase, but they
which is still closed source. But but

237
00:18:41,960 --> 00:18:47,960
they actually is like from IF from
IF's Classic five, which was completely close

238
00:18:48,000 --> 00:18:53,359
source, and then they actually managed
to build that when they initiated in a

239
00:18:53,440 --> 00:19:00,960
complex for for a version six and
actually got at least one I think there

240
00:19:00,039 --> 00:19:03,960
was. There was. There was
more contributors than me. Not many,

241
00:19:03,079 --> 00:19:07,839
but there was. So the fact
that they took contributors through Coplex to me

242
00:19:07,960 --> 00:19:11,480
is fascinating because it shows Yeah,
it pointed to the way forward and the

243
00:19:11,519 --> 00:19:15,319
fact that they ultimately moved away from
coplex and onto GitHub that was far better

244
00:19:15,480 --> 00:19:21,160
suited to that problem. Absolutely,
absolutely, and of course they realized that

245
00:19:21,400 --> 00:19:26,519
when they started not need to call
that that was an appropriate platform for doing

246
00:19:26,839 --> 00:19:30,759
things like signal R I think was
the first, although it was it was

247
00:19:30,839 --> 00:19:36,680
started as a GitHub project and then
became part of Microsoft later, but it

248
00:19:36,839 --> 00:19:41,000
certainly was a demonstration of contribution.
Yeah, well, should we get back

249
00:19:41,039 --> 00:19:45,759
to any framework? Sorry? Sorry, I could listen to your stories all

250
00:19:45,839 --> 00:19:51,559
day and I can't wait to read
your book. Yeah, it's only someone

251
00:19:51,599 --> 00:19:56,359
who write it'd be awesome. Let's
ask the classic question for all anity framework

252
00:19:56,400 --> 00:20:00,160
people, which is code first or
database first? Yes, I'm I'm a

253
00:20:00,559 --> 00:20:07,519
big fan of a database or let's
this is call it database. Just call

254
00:20:07,599 --> 00:20:14,359
it schemer first. Maybe, yes, I think that's a better name,

255
00:20:15,200 --> 00:20:22,880
because it's like, if you do
the pitfall of doing model first is that

256
00:20:23,880 --> 00:20:34,319
unless you think schemer, think about
the data type and the sizes and the

257
00:20:34,400 --> 00:20:41,079
appropriate data type for each of your
properties, um, you end up doing

258
00:20:41,200 --> 00:20:45,079
something wrong. Like the classic one
is, of course, the fact that

259
00:20:45,240 --> 00:20:51,160
if you define something to be a
string, it will end up as a

260
00:20:51,960 --> 00:21:00,799
barcha max property in field in the
database, which I don't know, maybe

261
00:21:00,839 --> 00:21:04,440
you don't know what this, which
nobody actually wants. Nobody really wants a

262
00:21:04,839 --> 00:21:11,279
string two gigabyte string for storing that
those one hunter. Yeah, if you

263
00:21:11,480 --> 00:21:15,599
do want a too big abyte string, stop that. You don't do that.

264
00:21:15,240 --> 00:21:19,759
That's story is a blob everything.
You shouldn't do that anyway, not

265
00:21:19,880 --> 00:21:26,160
in not in the poor database.
So yeah something. Yeah, And I

266
00:21:26,279 --> 00:21:30,480
love the way you're describing this error
because what you end up doing with code

267
00:21:30,559 --> 00:21:34,920
first then is being very clever about
thinking about how you're going to make your

268
00:21:36,000 --> 00:21:38,200
schemes. And if you're going to
think that way, just make the schemas.

269
00:21:38,279 --> 00:21:41,160
Yeah, it's more discribed exactly,
because then you start. Then you

270
00:21:41,359 --> 00:21:48,359
basically have to take a ate your
model with a tiny fragments of something that

271
00:21:48,519 --> 00:21:56,759
looks basically like sequel, like in
attributes or like small hint thing this isn't

272
00:21:56,279 --> 00:22:00,640
I don't want this. I want
to store this as a string, but

273
00:22:00,759 --> 00:22:03,519
I don't want any foreign characters in
it, so I want it to be

274
00:22:03,799 --> 00:22:07,559
non Unicode, so I have to
use is unicode falls and I want it

275
00:22:07,640 --> 00:22:11,480
to be only two hundred and fifty
characters. I want my dates to be

276
00:22:12,359 --> 00:22:18,480
as small as possible, so I
want them to be with less precision and

277
00:22:18,559 --> 00:22:19,920
so on. You know, it's
an easy way to do that. It's

278
00:22:19,960 --> 00:22:25,720
with create table. It's a very
easy way to do that, exactly clear.

279
00:22:26,039 --> 00:22:32,279
And the cool thing about it is
that's actually in particular in the sequel

280
00:22:32,440 --> 00:22:37,119
server area, which is my kind
of area of expertise here, is that's

281
00:22:37,240 --> 00:22:44,599
really really good tooling for doing that
inside and outside of Visual Studio, in

282
00:22:44,799 --> 00:22:49,599
visual studio and as your data studio
Sigle management studio even yeah, I still

283
00:22:49,720 --> 00:22:56,359
use that in single management studio even
but in particular I'm really fond of of

284
00:22:56,519 --> 00:23:00,400
doing it inside visual studio in what
is called a database project, because you

285
00:23:00,480 --> 00:23:08,720
get like not only intelligence like you
can't write bad create table statements that don't

286
00:23:10,680 --> 00:23:14,440
build or compile or whatever you call
it in the in the secul world,

287
00:23:14,559 --> 00:23:21,599
or cannot execute anyway. But you
also get like a cohesive understanding of your

288
00:23:21,839 --> 00:23:26,640
entire schemer um as part of that
tooling. So if you're writing a view

289
00:23:27,200 --> 00:23:32,960
and you're referencing some other column and
table from that view, you will not

290
00:23:33,039 --> 00:23:36,960
be able to write something pointing to
a column that doesn't exist, because it

291
00:23:37,119 --> 00:23:41,240
knows your entire schemer and can see
that as a model and provide intelligence and

292
00:23:41,680 --> 00:23:45,480
of course the built if you If
you so, we will fail. If

293
00:23:47,079 --> 00:23:51,839
if you are inconsistent and referring to
things that don't exist, right, you're

294
00:23:51,920 --> 00:23:57,960
you're stirring up memories for me,
Matt None road trip the what was the

295
00:23:59,319 --> 00:24:03,400
nickname that for those data projects,
There was a nickname for that technology individual

296
00:24:03,480 --> 00:24:10,839
studio, that guy. We're old
da data data data dude. That's it,

297
00:24:11,000 --> 00:24:11,880
data dude. Yeah, you got
it. You pulled it out,

298
00:24:12,920 --> 00:24:18,240
nice one. That's right. That's
all right. And this was the beginning

299
00:24:18,359 --> 00:24:22,559
of treating that schema as source code. Yeah right, you no longer,

300
00:24:22,680 --> 00:24:26,319
did you know? You no longer? Because you can't just drop a database

301
00:24:26,359 --> 00:24:29,480
and recreated the data. And it's
important. And so the fact that data

302
00:24:29,599 --> 00:24:33,759
Dude would would take your modified schema, analyze your existing database, and write

303
00:24:33,799 --> 00:24:40,359
the altar statements for you. Yeah, you weren't storing the alter statements a

304
00:24:40,440 --> 00:24:44,079
schema. You were storing a new
schema as schema. But the tool would

305
00:24:44,440 --> 00:24:47,880
would fix the two together. Like
yeah, that's a that was a metic

306
00:24:48,000 --> 00:24:52,599
juice, hugely power. Yes.
So so I call it the Sciat State

307
00:24:55,000 --> 00:25:00,079
database M because you actually you're describing
at this point in time, I'm in

308
00:25:00,240 --> 00:25:04,799
order to accommodate this new feature or
whatever, I need these two additional tables,

309
00:25:04,839 --> 00:25:07,200
and I need an extra column,
and I need a foreign key here

310
00:25:07,200 --> 00:25:11,519
and there and so on, and
this this is part of my my new

311
00:25:11,640 --> 00:25:17,799
feature. And so so I want
to describe after I implemented my new feature,

312
00:25:17,880 --> 00:25:21,279
this is what I want the resulting
schema to look like. Nice.

313
00:25:21,480 --> 00:25:25,640
Yeah, So so this desired state, that's what I would call it here.

314
00:25:25,920 --> 00:25:27,680
Yeah, No, And it's very
compelling. And it's one of the

315
00:25:27,839 --> 00:25:33,160
arguments for code first is that it's
just part of your you keep it all

316
00:25:33,200 --> 00:25:36,240
part of your source code. But
it's like, hey, you know better

317
00:25:36,279 --> 00:25:38,759
ways let's sea the schema part of
the source code too, because it is

318
00:25:40,119 --> 00:25:42,720
declarative and coherent, and you know, more people can work on it with

319
00:25:42,920 --> 00:25:48,119
you, and it creates great results
for Entity framework. So yeah, well

320
00:25:48,119 --> 00:25:52,039
I'm glad we're in violent agreement,
Eric, thank you for that. I

321
00:25:52,079 --> 00:25:53,240
don't know where we were gonna get. What is no no, no,

322
00:25:53,319 --> 00:25:59,400
no no? What is dak fx
and so so? Dak fx is actually

323
00:25:59,480 --> 00:26:07,960
an API that Microsoft publishes as a
Nougat package dot Net API, which allows

324
00:26:07,000 --> 00:26:11,599
you to manipulate the result of a
database product. The output of a database

325
00:26:11,680 --> 00:26:17,119
product is something called a duck pack, which is basically a SIP file with

326
00:26:17,920 --> 00:26:25,400
some examil files inside it describing the
schema. So this is what the tooling

327
00:26:26,039 --> 00:26:30,839
reads when it's applying the changes.
It reads this duck pack and compares it

328
00:26:30,960 --> 00:26:37,799
with the running production database. That's
dot d c P A C by the

329
00:26:37,839 --> 00:26:44,839
way, E A c P.
Yes. That framework allows you to create

330
00:26:45,039 --> 00:26:51,799
duck packs programmatically and manipulate them and
deploy them and so on from your from

331
00:26:51,839 --> 00:26:56,880
your own code. So that is
essentially taking the taking a place of a

332
00:26:57,119 --> 00:27:03,240
create scripts like script creation tool exactly
exactly. So it's it's taking the place

333
00:27:03,319 --> 00:27:08,000
of a like migration script or so
one is you can run this from your

334
00:27:08,039 --> 00:27:14,880
own code and do whatever you want. And that's also a command line tool

335
00:27:14,960 --> 00:27:19,799
which of course is just a thin
layer over this API called Sequel package,

336
00:27:21,839 --> 00:27:25,440
which is a dot Net global tool
you can install these days. Wow,

337
00:27:25,599 --> 00:27:30,119
very cool, and that will actually
do like the publishing of of your changes

338
00:27:32,400 --> 00:27:36,880
and I have made tooling. The
more part of the EF core power Tools

339
00:27:37,119 --> 00:27:41,400
features set is that it can actually
read the schemer from a duck pack and

340
00:27:41,680 --> 00:27:45,880
generate the database model from that instead
of from a running database. Nice.

341
00:27:45,960 --> 00:27:52,839
Wow, So you have you have
a like a sometimes here the term in

342
00:27:52,400 --> 00:27:59,240
a developer loop or whatever that where
you where you can actually create something with

343
00:27:59,440 --> 00:28:03,960
your create table statements and then just
quickly run this tooling and then it will

344
00:28:04,079 --> 00:28:11,400
update your c shop model and the
c shop entities based on the team to

345
00:28:11,440 --> 00:28:15,799
set you just made with your Sequel
statements. Yeah. I like that fair

346
00:28:15,839 --> 00:28:18,559
cool. And the more we can
treat a database like it's just other code

347
00:28:19,160 --> 00:28:22,839
part part of the overall package and
goes with with versions and so forth.

348
00:28:22,960 --> 00:28:29,279
Yea. And most importantly with that, it's sort of desired state mindset can

349
00:28:29,359 --> 00:28:37,000
be rolled back I mean not recommended
nobody, but it is possible. The

350
00:28:37,079 --> 00:28:40,880
main thing that everyone's terrified around database
is getting that deadlock state where it's like

351
00:28:40,960 --> 00:28:42,920
the old code won't run and the
new code doesn't work, Like what do

352
00:28:44,039 --> 00:28:48,000
we do? Yeah, yeah,
guys, let's take a quick break,

353
00:28:48,039 --> 00:28:51,119
and when we come back, I'm
gonna ask my question about my old pain.

354
00:28:51,359 --> 00:28:57,319
So stick around. We'll be right
back, and we're back. You're

355
00:28:57,319 --> 00:29:00,240
listening to dot ned Rocks. I'm
car Off Frankle, That's Richard Campbell,

356
00:29:00,880 --> 00:29:06,160
and that's Eric Eiskal Jansen. Uh, and we're talking data. We're talking

357
00:29:06,240 --> 00:29:11,279
Anny framework and so here you go. Eric. When you're using any frameworking

358
00:29:11,759 --> 00:29:15,960
creating a context that you're going to
use on a web back end, like

359
00:29:15,079 --> 00:29:19,119
say from an EPI controller, do
you use tracking or do you turn it

360
00:29:19,200 --> 00:29:26,279
off? It depends. So there
is a use case for tracking, yeah,

361
00:29:26,319 --> 00:29:30,759
on a web back end, because
I always found it to be to

362
00:29:30,880 --> 00:29:37,000
get in the way. So what
is that use? Use it for update

363
00:29:37,240 --> 00:29:45,799
statements. But now there's this new
fangled execute update EPI, so the use

364
00:29:45,880 --> 00:29:49,000
of it is populist. Let's just
step back, man. Yeah, yeah,

365
00:29:49,359 --> 00:29:53,799
maybe a listeners can understand what why
you are asking this question. So

366
00:29:56,519 --> 00:30:03,039
one of the major major features of
IF core is also apart from the ability

367
00:30:03,079 --> 00:30:07,359
to generate sequel statement based on your
careers, is the ability to track changes

368
00:30:07,039 --> 00:30:14,880
to the to the entities that you
hydrate from the database. And it's using

369
00:30:14,960 --> 00:30:18,960
something called a change tracker, which
keeps a copy of everything you read and

370
00:30:18,039 --> 00:30:23,359
then compare so when you're doing updates, it compares the properties see what has

371
00:30:23,440 --> 00:30:27,799
changed. So it's only doing updates
of things that have actually changed, so

372
00:30:27,960 --> 00:30:36,559
it's not like doing a blindfold update
of everything. And of course as an

373
00:30:36,599 --> 00:30:41,119
overhead of running that, like you're
you're doing copies of data and you have

374
00:30:41,240 --> 00:30:45,200
to when you do saves, you
have to do the comparison and to find

375
00:30:45,240 --> 00:30:51,079
out what needs to be updated and
so on. So so in in in

376
00:30:51,160 --> 00:30:56,160
the ape and it's it's always on. You can switch it on, is

377
00:30:56,240 --> 00:31:02,680
like switch it off for your entire
context in your configuration. But but if

378
00:31:02,720 --> 00:31:06,640
you don't do that, it's always
on. So so you you end up

379
00:31:06,799 --> 00:31:11,920
having a lot of s note tracking
statements in your code to turn it off

380
00:31:12,079 --> 00:31:15,759
or for careers that some simply gets
stuff. Yeah, I fun, I

381
00:31:15,799 --> 00:31:18,519
can't remember the issue thought I was
having but I think it was when I

382
00:31:18,559 --> 00:31:22,960
went to go delete something. If
some entity was out there that it was

383
00:31:23,039 --> 00:31:30,119
tracking and I deleted it, it
would complain it wouldn't let me delete things,

384
00:31:30,200 --> 00:31:33,839
little things like that, and it's
like, Hey, I'm the only

385
00:31:33,920 --> 00:31:37,400
programmer here, right, why are
you giving me this trouble? Why are

386
00:31:37,440 --> 00:31:41,160
you hurting me? Yeah? Yeah, So I always turned it off,

387
00:31:42,240 --> 00:31:47,359
and now that will. Of course
seven they've actively made two new APIs,

388
00:31:47,680 --> 00:31:52,480
one called execute delete and one called
execute update okay, which is like you

389
00:31:52,599 --> 00:32:02,599
can it's basically sugarcoating over a link
way of phrasing a bulk update or bulk

390
00:32:04,000 --> 00:32:07,519
delete statement okay, and and by
and by bulk it can I mean it

391
00:32:07,559 --> 00:32:10,880
can also just hit one road,
doesn't have to hit many rows. But

392
00:32:12,519 --> 00:32:17,400
so and and of course then you
kind of all this about change tracking forget

393
00:32:17,440 --> 00:32:23,880
about it because you you basically just
phrasing a strongly typed update statement or a

394
00:32:23,920 --> 00:32:30,240
strongly type delete statement and it's not
tracking anything. I guess. I guess

395
00:32:30,319 --> 00:32:37,480
what's the benefit of tracking when you're
only making calls into any framework database from

396
00:32:37,960 --> 00:32:43,480
you know, an API controller and
you know your your data manager is a

397
00:32:43,559 --> 00:32:45,960
singleton, and like, what's that
what's the point of tracking. Before,

398
00:32:46,160 --> 00:32:52,279
when you had to do a delete
or an update on an on an existing

399
00:32:52,960 --> 00:32:58,079
entity, you actually had to retrieve
it first and then do your your remove

400
00:32:58,519 --> 00:33:02,839
method or your update your properties.
So then you you actually had to have

401
00:33:04,039 --> 00:33:08,640
tracking enabled because otherwise ef CORPS wouldn't
know about those. So if you were

402
00:33:08,720 --> 00:33:14,599
changing like you have a record and
you're changing a state column for example,

403
00:33:15,640 --> 00:33:22,160
in a in a put method,
then you would have to get the entity

404
00:33:22,960 --> 00:33:29,680
and change track it and say I
want to update the state from whatever completed

405
00:33:29,799 --> 00:33:34,039
or something like that, and then
do a safe change is That was that

406
00:33:34,240 --> 00:33:37,160
was the only way you could do
that if you didn't, if you weren't

407
00:33:37,200 --> 00:33:44,680
really keen on right on calling a
stop proceedure of writing work. But now

408
00:33:45,400 --> 00:33:50,720
with these two new APIs, you
don't need to do that. If you

409
00:33:50,759 --> 00:33:54,720
don't, if you just know the
ID of the of the road to delete,

410
00:33:54,759 --> 00:33:59,039
for exam, you would just put
from formulate a link statement where the

411
00:33:59,240 --> 00:34:05,960
ID equal the idea that you just
got in from the controller. Yeah.

412
00:34:06,200 --> 00:34:09,360
Now you're making me think that I
wrote my stuff wrong because it worked and

413
00:34:09,679 --> 00:34:16,920
uh and I had change tracking turned
off. We can do a code review

414
00:34:17,039 --> 00:34:20,159
later. Yeah, yeah, I
would love to. That'd be great.

415
00:34:21,360 --> 00:34:24,320
You know, I admit that I'm
not an entity framework expert, but I

416
00:34:24,360 --> 00:34:30,119
remember people often end up with doing
things like attached and update methods, and

417
00:34:30,199 --> 00:34:34,920
it's like things you should really use
so hard, no exactly, yeah,

418
00:34:36,679 --> 00:34:40,559
so yeah, but but certainly the
U the use of the change tracker as

419
00:34:40,639 --> 00:34:46,079
a and and and tracking changes is
really really useful when you have a desktop

420
00:34:46,119 --> 00:34:51,360
app, yeah, a state state
full app. Yeah, and you have

421
00:34:51,440 --> 00:34:57,360
a long lived TB context, yes, and that is barely the case in

422
00:34:57,519 --> 00:35:01,039
a in a web api s otherwise
you're doing it wrong. Anyway. Any

423
00:35:01,079 --> 00:35:05,880
framework was designed during the age of
wind forms and WPF, wasn't it.

424
00:35:06,079 --> 00:35:10,360
Yeah, yeah, exactly, So
it's like wind forms WPF, those kinds

425
00:35:10,400 --> 00:35:15,679
of like yeah, like disk top
apps, enterprise desktop apps, and they

426
00:35:15,760 --> 00:35:21,920
had made a lot of sense to
I will collect and a number of changes

427
00:35:22,000 --> 00:35:25,599
on this form and then I will
do a safe change. But unfortunately safe

428
00:35:25,679 --> 00:35:32,400
changes. Remember when we call them
smart clients, Yeah, something like that,

429
00:35:34,559 --> 00:35:39,840
why they were dumb clients. Well, and eventually into framework six would

430
00:35:39,840 --> 00:35:45,960
then issue forty insert statements one by
one, yeah, and you would sit

431
00:35:45,039 --> 00:35:52,920
there exactly. So yeah, it's
improved since then. Yeah, yeah,

432
00:35:53,119 --> 00:35:57,000
and we and we write software differently, let's face it, right, like

433
00:35:57,119 --> 00:36:00,280
that's it's interesting to think about trying
to work any more dateless way, that

434
00:36:00,440 --> 00:36:04,880
kind of normal scalable approach to software. But do you say, you know

435
00:36:05,199 --> 00:36:07,559
it's it's stay. We're talking STAATEF
only for data, right. I mean,

436
00:36:08,039 --> 00:36:12,440
if you think about a Blazer application, right, a Blazer server application,

437
00:36:13,079 --> 00:36:16,159
there's state for every user, but
it's not. You don't have long

438
00:36:16,280 --> 00:36:22,239
held dB contacts for every user.
That's crazy because you know if you have

439
00:36:22,199 --> 00:36:27,079
it's fine when you have one client, right and you have a few long

440
00:36:27,679 --> 00:36:31,639
running dB contacts, and that's all
great when you're on a desktop app.

441
00:36:31,679 --> 00:36:36,039
But in a web app you millief
blights, you're not going to have it.

442
00:36:36,760 --> 00:36:38,920
It doesn't really escape. No,
No, as the number of users

443
00:36:39,079 --> 00:36:45,920
rises above one one, you're in
trouble. Yeah, yeah, you're in

444
00:36:46,039 --> 00:36:51,719
trouble. Yeah. So so the
team actually makes a lot of improvements in

445
00:36:51,920 --> 00:36:55,719
in that area also for us like
swoot Putter and scalability, because they wanted

446
00:36:55,880 --> 00:37:02,679
to to do better in a in
a suite called take empower right where they're

447
00:37:02,760 --> 00:37:09,559
measuring against other frameworks and competitors so
to speak. We and we've talked about

448
00:37:09,599 --> 00:37:13,480
this with Scott Hunter a number of
times, that the dot net team as

449
00:37:13,519 --> 00:37:20,159
a whole was big on let's get
good scores on tech em power and the

450
00:37:20,320 --> 00:37:23,480
combination of like razor pages on dot
Net, raizor pages on the linking.

451
00:37:23,519 --> 00:37:29,559
It's like all those different kinds of
setups, and you don't want to be

452
00:37:29,800 --> 00:37:31,679
the one left out, no,
exactly, you don't want it to not

453
00:37:31,880 --> 00:37:37,159
be any framework exactly, And I
mean you can call that. It's also

454
00:37:37,320 --> 00:37:42,440
it's turned out maybe there were tweaking
stuff for just for the purpose or making

455
00:37:42,639 --> 00:37:50,039
things, making very unusual choices about
how they implemented stuff for the purpose of

456
00:37:50,519 --> 00:37:54,519
performance pure performance. Y. I'm
looking at the number one dot net stack

457
00:37:57,719 --> 00:38:07,639
bar chart right now tech empower.
Coming in ninth is asp core on Linux

458
00:38:07,159 --> 00:38:15,400
with postgress raw data database connectivity writing
directly the database. Ye. I don't

459
00:38:15,480 --> 00:38:20,800
know that you do that right,
but exact could be it's a structure to

460
00:38:20,920 --> 00:38:28,760
get good performance exactly. But but
I think you no matter why they did,

461
00:38:28,800 --> 00:38:35,719
there's certainly the any user of ef
core has benefited tremendously sure from from

462
00:38:35,800 --> 00:38:38,599
that, from that optimization, and
that the effort that was engineering effort that

463
00:38:38,719 --> 00:38:42,960
was put into it. Yeah,
there is an entity Framework one and it's

464
00:38:43,039 --> 00:38:47,559
thirty eighth and again still incredibly fast. Right like that. There's a huge

465
00:38:47,599 --> 00:38:52,920
difference between the thirty eighth position and
the first position is a small number.

466
00:38:52,480 --> 00:38:58,000
But it's ASP dot net core running
on Linux with Postgress as a database,

467
00:38:58,280 --> 00:39:05,039
with entity framework. That's not that's
a very reasonable stack. It is not

468
00:39:05,199 --> 00:39:07,079
unusual in any way to look at
it. And and because you're talking,

469
00:39:07,400 --> 00:39:10,480
they call it full o RM.
So it's like, could be pointed at

470
00:39:10,519 --> 00:39:15,039
sequel, could be pointed at my
sequel. You know, it doesn't matter.

471
00:39:15,239 --> 00:39:17,519
I mean, performance is going to
vary obviously, but just the fact

472
00:39:17,559 --> 00:39:21,599
that you can point at it to
say it's in there, it's in the

473
00:39:21,760 --> 00:39:24,920
top hundred, yeah, you know. And it's so it runs in these

474
00:39:25,159 --> 00:39:32,199
extraordinarily high performance numbers. Admittedly for
an artificial task, yeah, constructive test

475
00:39:32,320 --> 00:39:37,400
is but yeah, but nonetheless,
so, yeah, it's good to have

476
00:39:37,480 --> 00:39:43,039
them there. Every every Entity framework
Core provider, of course, needs an

477
00:39:43,199 --> 00:39:47,760
eighty O dot Net provider underneath it. That's that's just that's reality. How

478
00:39:47,840 --> 00:39:52,400
Microsoft, Yah, that's a reality, and that's how Microsoft decided to build

479
00:39:52,400 --> 00:39:58,880
it because otherwise it would never get
anywhere. So they're using existing groundwork of

480
00:39:59,360 --> 00:40:01,280
all the ad dot net providers that
are out there, and on top of

481
00:40:01,360 --> 00:40:07,000
that, you can build a provider
for your database system. Right. And

482
00:40:10,239 --> 00:40:16,440
probably all know that the provider for
a sequel server was System Data sequel Client,

483
00:40:16,840 --> 00:40:21,360
right, Yeah, and in dot
neet framework, and it was actually

484
00:40:21,440 --> 00:40:25,320
also parts of it reported to dotnet
core very early in the dot neet core

485
00:40:25,480 --> 00:40:31,559
time frame. But now Microsoft has
actually open sourced all that and they have

486
00:40:32,519 --> 00:40:40,400
created as as stand alone repository for
the Microsoft client driver of a sequel server

487
00:40:40,519 --> 00:40:45,639
and as your sequel and it's called
Microsoft Data Sequel Client, right. And

488
00:40:45,880 --> 00:40:52,320
also I actually also contribute to that
project. Nice, but so so that's

489
00:40:52,360 --> 00:41:00,280
also a very interesting development. The
problem with that project is that it's it's

490
00:41:00,519 --> 00:41:07,519
it's like a two headed beast.
It's a it has a dot net corep

491
00:41:07,039 --> 00:41:13,079
dot dot net brands, it has
dot Net versions of all the classes,

492
00:41:13,159 --> 00:41:17,199
and it has dot neet Framework versions
of multiple classes, and they're trying to

493
00:41:17,360 --> 00:41:22,239
merge those two. But it's basically
like a two headed beast, and it's

494
00:41:22,679 --> 00:41:28,880
the dot net framework codebase of course, is like, yes, you can

495
00:41:28,920 --> 00:41:34,559
see Scott got three is a signature
in there somewhere or whatever. It's like

496
00:41:34,960 --> 00:41:40,719
two thousand and something one or whatever
or before that. Even of course the

497
00:41:40,800 --> 00:41:45,280
dot net core codebase is newer,
but just because dot neet core is newer.

498
00:41:45,400 --> 00:41:52,320
But then it's also a little bit
quirky because they had to not create,

499
00:41:52,519 --> 00:41:55,800
not add a lot of features for
the first iterations of that dot neet

500
00:41:55,880 --> 00:42:01,239
core because it just just just didn't
have each a parody with dot net framework

501
00:42:01,320 --> 00:42:07,519
at that point. And now they're
trying to move them back. So so

502
00:42:07,760 --> 00:42:13,719
it's it's it's really part of the
performance. Of course, also hintes on

503
00:42:13,800 --> 00:42:21,119
the performance of that driver, right, and it's it's a quirky code base,

504
00:42:21,679 --> 00:42:24,800
and I contribute to it myself,
and the team is really good,

505
00:42:25,400 --> 00:42:29,360
and they're making a big effort,
but I mean, it is what it

506
00:42:29,519 --> 00:42:32,800
is, and they can't they can't
just rip it away and start over.

507
00:42:34,880 --> 00:42:38,280
So so what is happening now,
which I think is extremely interesting, is

508
00:42:38,320 --> 00:42:44,800
that the of Court team, i
assume, in collaboration with some people from

509
00:42:44,840 --> 00:42:52,599
the sequel team, is actually creating
a new provider completely from scratch, using

510
00:42:52,360 --> 00:43:02,559
all the new fangled low memory APIs
like spans and so your educational APIs for

511
00:43:04,000 --> 00:43:07,920
reading stuff directly from the wire and
so on. Well, so it'll I

512
00:43:07,039 --> 00:43:12,360
imagine it'll surface as a lightweight provider
with a limited set of functionality. It

513
00:43:12,440 --> 00:43:16,239
will surface as a definitely surface as
a lightweight provider. And I don't think

514
00:43:16,280 --> 00:43:22,599
the intention is to ever support all
the sequel ball copies, sequel dependency.

515
00:43:22,719 --> 00:43:28,920
You have all these kind of classes
that have emerged one by one in the

516
00:43:29,800 --> 00:43:31,880
classic sequal client, and that will
not be part of it. Sure,

517
00:43:32,760 --> 00:43:37,760
but no, but that it's no
different than parts of the original dot and

518
00:43:37,880 --> 00:43:43,679
framework never made it decre because they
were too dependent on isacic filters or Windows

519
00:43:43,760 --> 00:43:47,599
specific stuff, Windows registry stuff like
that. So yeah, but it came

520
00:43:47,719 --> 00:43:52,920
later in additional packages and things you
could add on. But I could also

521
00:43:52,960 --> 00:43:57,519
imagine once this thing is shipped,
you'll use it where you can and where

522
00:43:57,599 --> 00:44:00,199
you must use the original one.
You will no reason not to use both.

523
00:44:00,719 --> 00:44:04,119
You've got a chunk of code depending
on bulk copy, or use the

524
00:44:04,159 --> 00:44:07,760
old one if you don't care about
performance, you're using bulk copy, yep.

525
00:44:07,880 --> 00:44:14,039
But for the lightweight you know,
scaly nobody does massive millions of bulk

526
00:44:14,119 --> 00:44:16,880
copy operations. They do a few
it'll be the min client thing, yeah

527
00:44:17,039 --> 00:44:20,920
yeah, or maybe they will just
do it from the command line or something

528
00:44:21,039 --> 00:44:23,519
like that. Yeah, not necessarily
in something that's just running all the time,

529
00:44:23,679 --> 00:44:27,920
like that time when we moved all
our data from our sequel server to

530
00:44:27,960 --> 00:44:30,559
Adgure. Remember that we were in
New Zealand. Yeah, I remember that

531
00:44:30,920 --> 00:44:34,880
and it went so well it did, yeah kind of. So, speaking

532
00:44:34,920 --> 00:44:37,800
of performance, I want to know
your thoughts on Dapper, the open source

533
00:44:38,159 --> 00:44:44,679
RM and dapper contrive, which is
another library that adds linked to Dapper.

534
00:44:44,760 --> 00:44:49,719
So Dapper is a lightweight wrapper around
adeo dot net and this is Dapper,

535
00:44:50,000 --> 00:44:55,239
not dap R correct, right,
And it's fast and people when it came

536
00:44:55,320 --> 00:44:59,719
out, we're saying it, you
know, it's faster than and the framework.

537
00:45:00,159 --> 00:45:02,280
And it was for a while,
and then when the new Entity framework

538
00:45:02,320 --> 00:45:06,880
came out, people were telling me
that the performance was on par with Dapper.

539
00:45:07,880 --> 00:45:09,199
I haven't tested, of course,
but that's what they were saying.

540
00:45:09,239 --> 00:45:14,159
So what do you think about it? I think it really served a purpose

541
00:45:15,199 --> 00:45:20,480
at one point in time where there
was people suffering from performance issues with the

542
00:45:21,440 --> 00:45:24,760
in particularly with entitive framework. But
I mean also the initial iterations of you,

543
00:45:24,840 --> 00:45:30,840
of course certainly had room for improvement. Yeah, that is no longer

544
00:45:30,920 --> 00:45:36,559
the case. That's been we talked
about with taking power effort that has been

545
00:45:36,639 --> 00:45:39,880
taking place. There's been a lot
of work done in that area, and

546
00:45:40,039 --> 00:45:46,679
the queerer performance is definitely on par
with Dappa and therefore eighty on that.

547
00:45:47,679 --> 00:45:55,800
Yeah. Yes, Dappa has the
ability to serialize any class you have in

548
00:45:55,920 --> 00:46:00,880
your code, so populate any class
you have in a code from a secret

549
00:46:00,920 --> 00:46:08,559
query and that has not been a
feature of ef core until if Core eight,

550
00:46:08,679 --> 00:46:13,880
which is coming later this year,
So you can take any class you

551
00:46:13,960 --> 00:46:17,719
have in your code and serialize it. I don't think it supports things advanced

552
00:46:17,760 --> 00:46:23,280
things like multiple results sets like Dabba
does, and that's probably not coming.

553
00:46:23,360 --> 00:46:29,599
So if you have a need for
that, like consume multiple sub results,

554
00:46:29,639 --> 00:46:32,599
it's from a start procedure or something. Yeah, then Dabba certainly still has

555
00:46:34,239 --> 00:46:37,199
a place. I'm speaking for myself, but I really like that I don't

556
00:46:37,239 --> 00:46:42,280
have to have too many dependencies that
does something that's almost the same thing.

557
00:46:42,559 --> 00:46:45,440
Yeah. Right. Also, you're
kind of locked in a sequel serve with

558
00:46:45,519 --> 00:46:49,239
Dapper because it's really for sequel,
isn't it or does it work with any

559
00:46:49,280 --> 00:46:52,559
ad on that. I think it's
supports, No, it's supports in it.

560
00:46:52,719 --> 00:46:55,559
Basically it supports a number of adio
providers. Okay, that makes sense

561
00:46:55,719 --> 00:47:00,320
because it's yeah, no, it's
just it's just a rapper over a deep

562
00:47:00,440 --> 00:47:04,159
connection. Acted. Yeah, so
it supports any a lot of adio dot

563
00:47:04,239 --> 00:47:07,400
net providers, got it. Yeah, but still, yeah, it's nice

564
00:47:07,440 --> 00:47:13,159
to know that. I think it
gives me great confidence to know that the

565
00:47:13,239 --> 00:47:17,880
stack I'm using can do everything I
want to do, right from from raw

566
00:47:19,039 --> 00:47:27,679
sequel mapping stock procedures, mapping random
classes in my code to advanced link queries.

567
00:47:28,280 --> 00:47:31,800
And I appreciate the idea that they've
optimized enough of EF that they're now

568
00:47:31,840 --> 00:47:37,400
looking at the providers because that's where
the winds are going to come exactly,

569
00:47:37,599 --> 00:47:42,079
exactly. Yeah, I think that's
a really interesting development that now they can't

570
00:47:42,119 --> 00:47:46,880
really do more because of just how
dot networks. You can't you can only

571
00:47:46,920 --> 00:47:51,920
do so much. Oh yeah,
Stephen's hub has done all the things exactly

572
00:47:52,559 --> 00:47:57,480
the optimization options are diminishing, and
written two hundred pages blog posts about it.

573
00:47:57,599 --> 00:48:00,800
So yes, it's amazing. Yeah, yeah, if I just you

574
00:48:00,800 --> 00:48:04,679
know, it's one of those blogboards
like I just trust you using new code.

575
00:48:04,719 --> 00:48:07,400
Will you not make me read this? Please? It's a complic The

576
00:48:07,519 --> 00:48:12,360
only thing worse it is that long? Is it so complex? Yeah?

577
00:48:12,599 --> 00:48:16,559
Yeah? Yeah? If you ever
wanted proof that optimized code is more difficult

578
00:48:16,639 --> 00:48:21,760
to read, right, there's a
reason why we use these abstractions like entity

579
00:48:21,840 --> 00:48:24,880
framework and so forth to make data
acts as simpler. Yeah, raw calls

580
00:48:24,960 --> 00:48:30,159
would be faster, but would you
read that code? Right? You don't

581
00:48:30,199 --> 00:48:34,320
want to look at optimized code.
It makes you sad? Yeah, you

582
00:48:34,400 --> 00:48:37,559
just want to use it, yeah, exactly, just wanted benefit from it.

583
00:48:37,760 --> 00:48:42,519
I switched up to dot net seven
and my stuff was faster. So

584
00:48:42,599 --> 00:48:45,119
speaking of dot at seven, let's
say we got some old F six running

585
00:48:45,119 --> 00:48:50,119
on dot framework. We want to
move it into dot net seven or even

586
00:48:50,239 --> 00:48:52,920
dot net eight or even done at
six. I mean, what is involved

587
00:48:52,960 --> 00:48:57,280
in doing that? Is it?
Is it as going to be as painful

588
00:48:57,320 --> 00:49:02,320
as I think? Actually? At
one at one point, the ef EF

589
00:49:02,519 --> 00:49:13,039
team created a Dotnet standard two point
one version of the EF six Classic,

590
00:49:14,079 --> 00:49:19,159
which means that you can actually run
IF six on dot neet core or dot

591
00:49:19,199 --> 00:49:29,800
neet six or seven or eight.
Yes, m that codebase that provider is

592
00:49:30,320 --> 00:49:37,119
of course Sequel server only, and
it also still uses the legacy System Data

593
00:49:37,239 --> 00:49:43,199
Sequel Client. Okay, so it
doesn't get all like if there's a new

594
00:49:43,360 --> 00:49:46,360
version of Sequel server that requires some
client team is they would not be incorporated

595
00:49:46,440 --> 00:49:53,480
because that that piece of software is
only maintained for top security issues and nothing

596
00:49:53,559 --> 00:49:59,400
else. So it's it's basically like
in maintenance mode. Could you use it

597
00:49:59,440 --> 00:50:02,000
as a step in stone, where
would you go from there? I published

598
00:50:04,079 --> 00:50:09,119
I have six provider which bridges the
gap, so you can take advantage of

599
00:50:09,239 --> 00:50:15,400
this new Microsoft Data Sequence client driver
we just spoke about. And it's of

600
00:50:15,480 --> 00:50:22,320
course supports all the always encrypted technology
that's come recently with the Sequel server.

601
00:50:22,559 --> 00:50:30,400
It supports all the authentication methods,
the new authentication methods against as your sequel

602
00:50:30,519 --> 00:50:37,639
like manage Identity, which allows you
to create passwordless connections from your app service,

603
00:50:37,679 --> 00:50:43,519
for example, to an assequel database
similar to what you were used to

604
00:50:43,719 --> 00:50:51,480
on premises with the integrated security and
so on. And that is not that's

605
00:50:51,599 --> 00:50:54,679
not very good supported in System Data
Sequel Client, but of course it's fully

606
00:50:54,719 --> 00:51:04,000
supported in Microsoft Data Sequence. So
I probably an alternative provider that bites a

607
00:51:04,079 --> 00:51:08,639
gap. And I was actually recently
just fortunate enough to have a pull request

608
00:51:08,719 --> 00:51:16,519
accepted for Entity Framework six that will
that will publish what I did as a

609
00:51:16,719 --> 00:51:22,719
as a supported Microsoft provider for that
useless Microsoft Data secut client instead of a

610
00:51:22,920 --> 00:51:30,039
system data secret, so you get
all the benefit of yea like sequel.

611
00:51:30,079 --> 00:51:36,000
Server two thousand and twenty two also
introduced a new over the wire protocol that

612
00:51:36,199 --> 00:51:40,000
works better with firewalls called t D
said, you can google it and read

613
00:51:40,039 --> 00:51:45,760
about it. But in order to
get that support, so it's more better

614
00:51:45,920 --> 00:51:50,800
encryption of what happens over the wire, even login process is encrypted. It

615
00:51:50,960 --> 00:51:55,559
wasn't before. So and in order
to you get that you need you didn't

616
00:51:55,679 --> 00:52:02,760
need the latest client driver. And
my package which is currently published and supported

617
00:52:02,840 --> 00:52:10,000
but only by me, not by
my UM is a certainly a stepping stone

618
00:52:12,000 --> 00:52:15,360
that can help you there. That's
very course. So you've got all these

619
00:52:15,440 --> 00:52:22,400
extensions and open source tools and products, um, we'll add links to them,

620
00:52:22,480 --> 00:52:28,360
of course. But what about somebody
who was writing extensions and wants to

621
00:52:29,559 --> 00:52:34,559
get individual studio You have any advice
for them? Yes, mass christ follow

622
00:52:34,960 --> 00:52:38,400
follow mass christis and he's a program
manager on the Visual Student team and he

623
00:52:38,559 --> 00:52:44,880
has a regular on the show.
Yes, and he has published a lot

624
00:52:44,920 --> 00:52:52,719
of content about extensibility. Um like
he had some like workshops where he like

625
00:52:54,559 --> 00:53:01,519
took you through creating an extension completely
from scratch insous studio with serving various purposes,

626
00:53:01,760 --> 00:53:07,400
and a lot of what he did
in his basement there was actually ended

627
00:53:07,480 --> 00:53:12,960
up being published extensions. So if
you if you prefer to do like viewing

628
00:53:13,199 --> 00:53:16,559
stuff on YouTube or similar media,
then that's definitely a little way to go.

629
00:53:16,719 --> 00:53:21,920
And he's really really good at explaining
stuff. Yeah, and there is

630
00:53:22,079 --> 00:53:27,639
a library that can also help you
because it is a little bit of it

631
00:53:27,760 --> 00:53:30,559
can quickly become a little bit of
a black back art. But the mass

632
00:53:30,599 --> 00:53:36,880
Cusson, together with some other clever
guys at Microsoft, has created a tool

633
00:53:37,000 --> 00:53:42,519
called the Visics Community tool Kit,
which is a library that makes it easy

634
00:53:42,639 --> 00:53:49,000
to do things that you would normally
do as an extension writer and not having

635
00:53:49,079 --> 00:53:53,599
to find out this is this interface
and you have to convert it to this

636
00:53:53,800 --> 00:54:00,159
implementation and then call this and that
method and put the h ref and get

637
00:54:00,280 --> 00:54:06,400
a zero non zero quote back from
this co operate them. So when all

638
00:54:06,480 --> 00:54:12,519
that's is wrapped nicely for you in
this library, So doing things like showing

639
00:54:12,599 --> 00:54:17,760
messages in a business studio, addressing
the status BA and putting up like yellow

640
00:54:17,920 --> 00:54:22,559
bars and things like that that you
want to do from your extension becomes like

641
00:54:22,880 --> 00:54:29,719
basically a one liner using that That
library nice. So that's definitely my recommendation

642
00:54:29,880 --> 00:54:31,800
is to the best way to get
started with that. Well, this is

643
00:54:31,840 --> 00:54:38,519
all Danish mafia stuff, right,
Yeah, And what I appreciate about Mads

644
00:54:38,559 --> 00:54:44,000
Christensen is he walks the walk like
that. Dude's got a lot of extensions,

645
00:54:44,559 --> 00:54:46,679
Like there's a reason why he can
explain it so well, he does

646
00:54:46,800 --> 00:54:51,360
the work. He does it.
Yeah, I mean, it's just it

647
00:54:51,519 --> 00:54:54,639
must be huge effort for him just
to keep all his extensions current. Oh

648
00:54:54,760 --> 00:55:01,039
yeah, that's great. Yeah.
Well and his ad file extension essentially that

649
00:55:01,559 --> 00:55:07,039
made it individual studio. Many many
of his extension has gradually paved their way

650
00:55:07,119 --> 00:55:12,079
into a visual studio one by one. So it's it's very cool, very

651
00:55:12,119 --> 00:55:14,400
cool. Yeah. So what's next
for you, my friend? What are

652
00:55:14,400 --> 00:55:20,679
you working on? I'm so the
ef Core power Tools, which has about

653
00:55:21,199 --> 00:55:25,599
three hundred thousand installs currently in visual
studio, and that of course is yeah,

654
00:55:25,639 --> 00:55:30,440
it wakes me very proud, but
it's it's still Windows only. You

655
00:55:30,559 --> 00:55:37,280
need Visual Studio on Windows in order
to use it. Recently, I actually

656
00:55:37,440 --> 00:55:44,000
somebody said, oh can this run
on Arm? It could now that visou

657
00:55:44,039 --> 00:55:47,599
Studio runs on Arm, so yeah, yes, but it's still limited to

658
00:55:47,719 --> 00:55:52,519
Windows of course. Yeah. So
the next thing I'm working on is is

659
00:55:52,559 --> 00:55:58,800
actually taking that. Um. So, as I said earlier, I'm basing

660
00:55:59,360 --> 00:56:05,559
my two ruling on the scaffolding EPI
if you wish that that if Core provides.

661
00:56:05,639 --> 00:56:09,920
But I'm adding a lot of additional
features, and all those additional features

662
00:56:10,400 --> 00:56:15,400
I would like to make them available
to other users on other platforms. So

663
00:56:15,639 --> 00:56:21,800
I'm next. For me, it's
basically thinking about creating a command line version

664
00:56:22,679 --> 00:56:30,039
of ef core power Tools. Yeah. Um and of course I mean some

665
00:56:30,159 --> 00:56:34,079
people ask me, can I is
a googie for this in Visual Studio code.

666
00:56:34,880 --> 00:56:38,360
Well, at least I give the
groundwork for somebody to so maybe I

667
00:56:38,480 --> 00:56:44,800
don't know anything about the other script
or so I couldn't even I wouldn't know

668
00:56:44,800 --> 00:56:49,960
where to start. We will not, but somebody else can then wrap my

669
00:56:50,119 --> 00:56:55,880
command line tool in some some nice
configuration googie to show my my configuration file

670
00:56:57,840 --> 00:57:00,199
in there. So so it will
be a big, big stepping stone for

671
00:57:00,320 --> 00:57:06,960
me, and then I'm also quite
exciting for me because I've never really if

672
00:57:07,079 --> 00:57:10,159
something ran on other platforms that I
created, it was by accident, it

673
00:57:10,280 --> 00:57:16,039
was not intentional, so so I'm
really looking forward to that. Yeah,

674
00:57:16,159 --> 00:57:19,639
that's great. Well, Eric Jansen's
finn to like to have you on the

675
00:57:19,679 --> 00:57:23,239
show and thank you for all your
hard work in great to dissemination of this

676
00:57:23,639 --> 00:57:29,760
complex topic. It's it's great,
great to talking to you. Thanks for

677
00:57:29,840 --> 00:57:32,440
having me, all right, and
we'll talk to you next time on dot

678
00:57:32,599 --> 00:57:59,320
net rocks. Dot net Rocks is
brought to you by Franklin's Net and produced

679
00:57:59,400 --> 00:58:04,960
by Pops Studios, a full service
audio, video and post production facility located

680
00:58:05,039 --> 00:58:08,599
physically in New London, Connecticut,
and of course in the cloud online at

681
00:58:08,679 --> 00:58:15,800
pwop dot com. Visit our website
at dt n et r ocks dot com

682
00:58:15,320 --> 00:58:21,079
for RSS feeds, downloads, mobile
apps, comments, and access to the

683
00:58:21,199 --> 00:58:24,800
full archives going back to show number
one, recorded in September two thousand and

684
00:58:24,840 --> 00:58:29,239
two. And make sure you check
out our sponsors. They keep us in

685
00:58:29,360 --> 00:58:35,079
business. Now go write some code
CNX time Goman
