►
From YouTube: Entity Framework: .NET Community Standup - July 8th 2020 - EF Core 5.0 Demo Extravaganza
Description
Join members from the .NET teams for our community standup covering great community contributions for Framework, .NET Core, Languages, CLI, MSBuild, and more.
Community Links: https://www.theurlist.com/efcore-standup-2020-07-08
A
A
A
Hello,
all
we
have
the
frustrated,
dev
yep
can
hear
awesome.
So
we're
gonna
kick
this
off.
We
have
a
packed
session
today,
we're
going
to
be
demoing.
Some
of
the
EF
core
5
features,
so
I'm
going
to
jump
into
some
links
share
some
of
those
from
the
between
now
and
the
last
stand-up,
and
then
we
will
jump
into
it.
So
let
me
share
Dada.
A
B
So
this
was
actually
been
possible
for
a
while
to
use
energy
framework
or
with
sequel
Lite
running
in
the
browser
for
like
offline
caching
or
whatever
local
data.
You
want
to
have
the
thing
they
changed
here
is
they
switched
from
dynamic
linking
to
static
linking,
and
so
it
used
to
have
to
go
through,
like
some
JavaScript
thing
to
load
a
separate
Azzam
assembly.
But
now
you
can
statically
link
sequel
a
into
your
apps
atom
file.
So
just
makes
the
experience
a
lot
better,
and
the
cool
thing
about
this
is
no
changes
require
DF
course.
B
So
we
built
on
top
of
sequel
a
PCL
raw,
which
happens
to
be
the
same
thing:
that
sequel
Lite
net,
which
is
a
very
popular
stick,
related
access
framework
for
xamarin
uses,
and
there
is
a
paragraph
in
here,
I
really
like,
so
we,
of
course
support
for
sequel
Lite
relies
on
Sukhoi
pizarra,
making
it
instantly
compatible
with
web
assembly.
So
it's
people.
A
Instantaneous
compatibility
always
a
good
thing.
Okay,
let
me
pop
over
here
we've
got
this
link
soft.
The
leading
this
is
a
EF
core,
in-depth
soft
deleting
with
global
query
filter.
So
this
is
something
that
is
pretty
powerful
feature,
especially
if
you're
doing
things
like
multi
tendency
in
this
case
it's
showing
how
to
use
these
global
query
filters
to
do
a
soft
delete.
There's
a
few
diagrams
and
examples
you
can
run
through
that
and
take
a
look
in
our
show.
Links
next
thing.
I
want
to
share.
We
do
have
preview
six
out.
A
So
what
you're
going
to
see
demoed
here
today
is
basically
a
feature
set
through
some
of
the
latest
previews
and
as
always
when
we
release
these
previews
at
the
very
bottom
is
a
thank
you
to
our
contributors.
We
have
a
lot
of
contributors
who
have
contributed
to
the
entity
framework
core
5
product.
So
take
a
look
at
those
and
a
big.
Thank
you
to
that.
The
last
link
Before
we
jump
into
demos.
Is
this
migrations
link?
What
we've
done
is
updated
our
migrations
documentation
quite
extensively
bry
site.
B
Some
things
you
may
want
to
do
to
change
them,
how
to
remove
them,
how
to
reset
migrations
entirely,
and
then
you
split
out
how
to
apply
them
in
different
scenarios.
He
talks
about
the
script
and
some
of
the
pros
and
cons
of
generating
a
script,
how
to
use
an
item,
potent
script
and
then
a
lot
more
rationale
about
when
you
should
or
shouldn't
apply
migrations
at
run
time.
A
And
as
always,
our
documentation
is
completely
open
source,
so
please
feel
free
to
review
that
and
give
us
our
your
feedback,
we're
very
happy
to
respond
to
that.
Let
me
make
a
switch
here,
because
now
we
are
going
to
move
into
the
next
phase,
which
is
some
demonstrations
by
our
very
own
Arthur
Arthur
I'm
handing
it
over
to
you,
okay,.
A
C
C
C
What
there's
also
little
bits
of
what's
going
on
or
in
other
places
as
we
go
through
the
demo,
so
kind
of
little
tips,
so
the
first
demo
I'm
going
to
go
through
is
just
basically
looking
at
looking
at
passwords
is
the
the
set
up
and
I
have
downloaded
here
the
a
text
file
of
the
top
1
million
most
common
passwords.
This
is
basically
went
to
Wikipedia
and
they
stared
here's.
This
link
to
a
github
repo
that
has
these
and
I
downloaded
them.
C
I,
don't
know
where
they
came
from
or
how
they've
been
collected
together,
but
anyway,
we're
going
to
play
with
that
list
of
passwords.
So
I
have
context
here
that
I've
set
up
with
it.
It's
I'm
using
a
user
secrets
to
read
my
configurations
string,
so
you
guys
don't
see
it,
but
we're
going
to
show
more
of
that
in
the
second
demo.
C
Basically,
all
it
is
is
simple,
single
entity
type
password
which
just
has
the
password
text
in
it
and
rank
so
nothing
at
all
complicated
there
and
I've
already
created
the
database
here
and
I'm
using
migration.
So
I
already
have
a
migration
here
that
I've
applied
to
create
the
initial
database
and
then
I
have
a
cedar
which
has
taken
the
passwords
out
and
acceded
that
database
with
those
things.
So
that's
where
that's
the
starting
point.
So
let's
go
look
at
the
code
in
the
actual
program.
C
Ok,
so
we're
using
here
a
console
application
I'm
going
to
use
a
console
application
for
both
of
these
primarily
because
I
think
it
reduces
the
the
rest
of
the
code
to
a
minimum.
So
you
can
see
really
just
what
we're
doing,
but
also
because
you
know
I
come
from
a
time
when
we
wrote
console
applications
for
real
things.
So
I
might
tell
a
story
about
that
later,
but
anyway,
console
applications,
I'm
also
doing
some
timing
in
this
demo
and
you
can
see
I'm
just
using
stop
which
start
new.
C
Obviously,
this
is
not
the
way
you
should
do
it
if
you're,
really
benchmarking
stuff
use
batch
benchmark
net
or
something
like
that.
That
will
give
you
much
better
results,
but
for
the
sake
of
not
wanting
to
add
extra
complexity
to
the
demo
I'm,
just
using
that-
and
most
of
the
code
in
here
is
a
simple
read
import
which,
where
we
ask
the
user
to
input
a
password
that
we
can
check
in
the
list.
C
So
you
know,
if
you
want
to
see
whether
your
password
is
in
the
top
million
passwords,
then
we
put
it
in
there
and
we
check.
Then
I
can
start
a
timer
and
we
do
this
real,
simple
query.
It's
just
basically
saying
find
me
any
passwords
that
match
that
input
password
and
print
them
out.
So
let
me
run
this.
C
C
To
three
different
three
different
cases,
I
think
I-
think
I've
known
as
I've
been
playing
with
this,
that
you
tend
to
get
capitalized,
not
capitalized,
and
the
first
letter
capitalized
in
all
of
these
anyway,
you
can.
We
have
on
our
little
timing
things
here.
You
can
see
that
this
took
690
milliseconds.
We
seem
to
quite
slow.
Let's
run
it
again
and
see
what
happens
it
doesn't
really
matter
if
I
use
the
same
the
same
one
or
not.
We
didn't
find
that
one,
but
this
time
it
ran
is
66
milliseconds.
C
So,
what's
going
on
here,
well
I
wanted
to
demonstrate
that
the
first
time
we
run
this
query,
because
this
is
the
first
time
the
context
is
being
used
in
this
demo
see
well.
This
is
the
first
time
we
knew
any
of
this
is
then
doing
model
compilation,
it's
creating
the
internal
service
siren
setting
up
internal
caching.
So
this
is
basically
the
cold
start,
and
then
it's
also
compiling
the
query.
The
second
time
we
go
through
the
loop
it
doesn't
have
to
do
any
of
that.
C
It
just
runs
the
query,
so
it's
faster
and
it
seems
also
to
get
a
little
bit
faster.
Sometimes
when
we
keep
running
it
and
that's
a
demonstration
there,
you
know
perfect
timing,
isn't
exact
and
doing
it.
This
way
is
a
very
poor
way
of
getting
good
results,
but
it's
demonstrating
that
the
first
time
we
ran
it.
It
was
slow
and
the
second
time
we
ran
it.
It
was
faster,
but
not
that
fast
I
mean
it's
searching:
a
million
passwords
and
it's
taking
in
42
milliseconds
on
my
machine,
which
is
which
is
fairly
slow
and
I.
C
Think
if
you
look
at
what
we
have
in
our
in
our
in
our
database,
so
let's
go
look
at
the
migration
script
that
we
created.
We
created
a
column
here,
but
it's
4n
via
Carmack's,
because
that's
our
default
for
string,
mappings
and
there's
no
index
or
anything
over
there.
So
every
time
we
ask
it
to
search
and
we're
getting
it
doing
a
table
scan
over
this.
So
now
we
can
select
add
an
index
to
this.
That
should
make
our
search
a
lot
faster.
C
C
I
don't
have
that
one,
but
I
could
just
do
model
builder
entity
password,
has
index
and
then
say
which
we
want
to
put
it
on
the
text
column
so
that
will
still
work
and
that
if
I
run
that
it
will
add
an
index
to
my
model,
we
don't
have
to
do
that,
starting
in
AF
core
5.
We
now
have
to
index
attribute
similar,
but
not
the
same
as
what
we
had
in
AF
6.
So
I
can
just
go
to
my
entity
type
here
and.
C
On
here,
I
can
say
index
and
then
I
can
just
do
name
of
text
and
that
will
create
an
index
there.
Now
you
always
put
index
attributes
on
the
class
in
AF
core
we've
debated
having
one
that
you
could
just
put
on
the
text
for
a
non
composite
index.
That
just
goes
over
a
single
column
and
we
might
do
that.
C
But
in
general
this
seems
a
lot,
a
lot
more
applicable
to
all
indexes
in
the
same
way
as
when
we
did
it
in
the
fluent
API
I
did
it
on
the
entity
type
because
you
can
use
multiple
columns
in
an
index.
We
put
it
on
there
on
the
entity
type
here,
so
that
I
could,
if
I
wanted
to
say
name
of
rank
and
get
a
composite
index
over
both
those
things.
I'm
not
going
to
do
that
right
now,
so
I've
created
the
I've
created
the
index,
but
I
need
to
change.
C
I
need
to
update
my
database
now
because
it's
obviously
a
change
to
the
schema
so
I'm
going
to
go
to
my
terminal
here.
Let
me
clear
this
out
from
where
I
was
doing
other
stuff
and
I'm
gonna
do
dot.
I
need
to
get
in
the
right
right
directory
when
you're
doing
these
net
EF
commands.
You
need
to
be
in
the
right.
The
right
fight,
the
fault,
the
place
where
your
CS
proj
file
is
for
them
to
work.
So
I'm
going
to
do
dotnet
EF
migrations
ad.
C
Next,
we
should
get
it
creating
an
index
in
the
migration
okay,
it
did
excellent.
So
we
have
a
warning
here.
So
we're
going
to
look
at
that
it
says
scaffolded
or
result.
The
the
operation
was
scaffolded
that
might
result
in
a
loss
of
data.
Please
review.
So
this
is
an
indication
that
you
should
always
go
review
your
migrations,
but
in
this
case
specifically,
so,
let's
open
a
migration
and
see
what's
happened.
So
you
can
see
here,
we've
got
a
create
index,
which
is
what
we
expected
in
our
migration.
Well,
you
can
see.
C
We've
also
got
an
altered
column
and
that's
because
when
you're
creating
indexes,
you
can't
use
Envia
Carmack's
columns,
so
the
default
mapping
for
when
you
put
an
index
on
it
is
n
VAR.
450
I
could
change
that
to
something
more
appropriate
because
I'm
pretty
sure
none
of
the
passwords
are
more
than
450
and
probably
a
lot
less
than
that.
But
this
is
fine
for
the
purpose
of
our
demo
and
also,
even
though
they
said
it
might
be
a
loss
of
data.
C
C
Okay,
so
we've
applied
the
migration
index,
so
doesn't
look
like
I
stopped
my
application,
but
I'll
stop
it
and
rerun
it
okay.
So
let's
look
up
G's
or
something
again.
Maybe
if
I
could
spell
that
it
was
better.
Okay
found
zero
in
607
religions
so
still
slow.
Because
of
the
warm.
What
remember
we
do
it
again
now
in
55,
so
that's
faster,
but
not
as
fast
as
it
gets
now.
C
I,
don't
know
why
it
goes
to
55,
then
11
I
think
it's
something
to
do
with
probably
sequel
server,
creating
the
index
or
doing
some
initialization
on
Linux.
If
there's
somebody
who
knows
all
about
that,
that's
great,
but
basically
what
you
can
see
is
that
if
we
keep
going,
we
have
4/7
so
considerably
faster
than
the
time
we
had
before
we
put
the
index
in.
So
that
seems
to
be
working
pretty
well
I'm,
gonna,
stop
and
see.
C
A
C
C
Will
keep
going
so
I
think
you
can
see
when
we
search
for
these
passwords,
that
we
have
multiple
results
being
found
for
each
password
and
that's
because
we're
doing
case-insensitive
search
the
reason
I'm
using
the
passwords
domain
for
this
demo
is
cause
passwords,
as
we
know,
are
case
sensitive.
So
let's
change
this
to
do
a
case,
sensitive
search,
so
we
don't
find
passwords
that
aren't
the
one
we're
looking
for,
but
just
have
different
casing.
So
let
me
go
back
to
our
code
if
I
can
find
it
program.
C
C
Okay,
so
what
we're
doing
here
is
we're
going
to
apply
a
collation
to
the
query
in
line,
so
you
can
see
we
have
this
ear
functions,
so
this
lets
you
guess
EF.
This
is
where
we
put
well-known
functions
that
EF
translate
and
we
have
this
collate
function,
and
this
says
when
you're
doing
when
you're
using
this
text
text
column
out
of
the
database
then
use
this
relation
and
the
collation
here.
This
is
the
default
sequel,
server
collation,
but
with
case
sensitive
instead
of
case
insensitive.
C
So
in
doing
this
we
can
guess
case
sensitive
query
for
a
specific
collation,
but
it
is
not.
It
does
not
require
any
changes
to
the
database,
so
I
should
be
able
to
just
run
this
signe
egg
exited
it
before,
and
we
should
now
see
case
sensitive
searching,
so
let
me
put
in
Jesus
and
you
can
see,
we
only
get
back
cheese
now,
one
more
time
on
that
one.
So,
let's
see
hang
on
this
is
this.
This
is
looking
slow
again.
C
So,
even
though
we've
got
an
index,
I
she's
gone
slow
again,
and
this
is
the
the
one
of
the
most
important
points
to
bring
out
here.
You
can
tell
sequel
server
or
whatever
database
you're
you
and
unfortunately
this
isn't
very
database
agnostic,
but
you
can
tell
it
to
do
a
correlation
in
the
query,
but
now
it's
not
going
to
use
that
index,
or
at
least
it's
not
going
to
use
it
efficiently,
and
so,
basically,
by
doing
this,
we've
kind
of
defeated
the
purpose
of
putting
the
index
in
there
in
the
first
place.
C
C
C
Use
collation
so
then
we're
gonna
do
use
collation
on
this
okay.
So
let
me
just
clean
clean
this
up,
so
you
can
see
it
easier.
So
property
text
use
collation.
Okay,
so
this
is
going
to
change
our
model
to
put
this
case-sensitive
collation
on
the
column.
So
it's
changing
our
model.
We
have
to
update
the
database
for
this.
So
back
to
migrations.
C
C
C
So
if
I
go
back
to
the
previous
migrations,
where
I
had
this
create
index,
I'm
gonna
copy
that
I'm
gonna
go
to
my
new
migration
here
and
then,
after
doing
the
alter
column,
I'm
going
to
tell
it
to
create
the
index
again
I'm
going
to
do
the
same
in
up
and
down
because
in
both
cases
we
want
to
create
the
index
in
the
same
way.
You
know
it
will
be
different
and
I'm
going
to
do
the
drop
index
before
so
I'm
copying
drop
index
from
the
previous
migration.
C
So
what
I've
done
now
is
I've
alter
my
my
migrations.
So
when
it
does
up
it'll
drop
the
index,
alter
the
column
to
change
the
collation
and
then
create
the
index
again.
Okay.
So
let's
try
dotnet
EF
database
update
again
it's
building
final,
my
new
migration
applied
it.
So
it's
done
okay!
So
now,
let's
try
running
this
again.
I
probably
need
to
exit
first
Hey.
C
C
B
We
never
actually
look
at
your
database
to
see
what's
there
and
what's
not
there
and
the
idea
is,
you
would
generate
a
script
and
you
could
run
it
on
twelve
different
servers
and
you
know
it
may
be
there
on
some
and
it
may
not
be
there
on
another,
and
so
we,
like
our
thirst
side
like
we
know
in
this
case,
that
that
index
exists
it
and
we
can
fix
this
bug
in
here,
but
in
general.
No,
we
don't
just
say:
hey.
C
B
C
So
what
I'm
doing
as
a
development
time
here
is
I'm
using
user
secrets.
Now,
normally
you
use
user
secrets
in
a
web
app.
So
something
like
this
and
in
a
web
app
when
you
scaffold
it,
you
get
this
main
method
that
calls
create
host
builder
to
build
the
host
and
inside
that
this
automatically
adds
the
user
secrets
configuration
for
you
create
default
builder.
Does
that
so
you
don't
actually
need
to
do
anything
so
normally,
when
you
use
used
secrets,
you'd
be
doing
it
in
a
web.
C
App
like
this
I,
as
I
said
earlier,
I'm
using
a
console
app
so
partly
because
it's
simpler
and
partly
because
old-school
and
my
story
around
contour
lapses.
This
is
a
music
store,
app
I,
actually
and
I.
Think
1994
and
I
don't
remember
if
it
was
before
the
web
was
invented
or
after
used
a
telomere
application
from
England
to
connect
to
a
music
shop
in
the
United
States
and
I
ordered
CDs
over
telnet
from
a
music
store.
I
said
you
know
what
what
artist
you
want
to
buy
it
this
way,
what
what
album
this
one!
C
C
You
don't
normally
get
this
with
a
console
application.
This
create
host
builder,
but
this
is
actually
what
EF
uses
when
it's
trying
to
determine
runtime
configuration
for
you
for
doing
things,
and
that
includes
a
scaffolding.
So
one
of
the
things
that
you
can
do
is
you
can
put
your
connection,
string
and
user
secrets
and
then,
as
long
as
the
reverse
engineering
tool
can
find
this
method,
it
will
get
that
out
of
user
secrets
for
you
and
use
it
as
your
connection
string.
C
So
I
now
have
a
connection
string
setup
that
this
application
knows
and
when
we
reverse
engineer
it
you'll
see
that
what
it
puts
in
the
DB
context.
For
this,
let
me
before
I
reverse
engineer:
I
want
to
quickly
just
go
and
show
you
the
packages
I'm
using
here.
So
so
this
is
my
user
seekers.
Id.
We'll
see
that
in
a
minute
and
I'm,
adding
sequel
server
packages
and
design
packages
range
framework
and
then
I'm
doing
hosting
and
configuration
user
secrets,
and
those
are
the
two
packages
I
need
to
do
this
now.
C
Obviously,
you
know
wouldn't
normally
have
those
in
a
console
application
and
Bryce
and
I
were
discussing
yesterday
about
ways
to
potentially
refactor
this.
So
you
don't
have
to
actually
build
the
host,
which
would
be
good,
but
it's
a
nice
little
workaround
that
if
you
are
using
non
asp
net
core
application
that
you
can
do
okay.
So
let's
go
back
here
and
let's
go
to
the
terminal
and
scaffold
from
my
music
store
database,
which
I
think
I
have
copy
and
pasted.
Here.
C
So
so
what
we're
doing
here
is
dotnet,
EF
and
then
we're
doing
scaffold
name
equals
music
store.
This
is
my
connection
string
and
all
I've
done
is
name
equals,
music
store
and
because
I've
added
the
user
secrets
as
music
store
into
my
then
my
application
can
will
find
that
in
the
user
secrets
and
retrieve
it.
In
fact,
let
me
let
me
show
a
couple
of
couple
of
so.
If
you
go
to
this,
this
documentation,
page
safe
storage
of
app
secrets,
asp,
net
coil.
C
C
It
puts
this
gooood
into
your
project
file
that
we
saw
a
few
minutes
ago
and
then,
when
I
want
to
add
a
secret
I
can
do
dotnet
user
secrets
and
then
set-
and
this
would
be
my
connection
string
key
so
I
think
it
said
it-
the
collection
of
strings
:
and
then
music
store,
for
example,
and
then
the
actual
connection
string
itself.
So
I've
done
this
before
and
put
my
connection
string
in
so
now.
This
is
available
as
music
store,
because
that's
what
I
put
there
in
my
user
secret.
A
A
C
A
A
A
Arthur
was
doing
some
more
advanced
things
on
the
Internet
I.
Remember
in
1992
was
my
first
exposure
to
it,
and
I
was
just
excited
that
I
could
tell
net
to
University
of
Michigan's
weather
server
and
I.
Remember
calling
my
mom
saying
I'm
in
South
Dakota
in
college
I
just
tell
knit
it
to
a
server
in
Michigan
and
got
the
weather
for
st.
Petersburg
and
she's
like
well.
You
can
just
look
up
my.
C
C
A
So,
while
you're
pulling
that
up,
Michael
asks
how
we're
handling
some
of
the
challenges
that
migration
seemed
to
have
he's
talked
to
people
who
are
apprehensive
to
use
them,
because
they've
had
issues
from
what
might
be
mismanaging
migration.
So
I'll
start
with
an
answer.
If
anyone
else
wants
to
chime
in
so
we're,
you
know
very
responsive
when
people
raise
issues
like
that,
we
are
very
happy
to
look
into
them
and
there's
only
I
guess
so
much
that
the
migrations
engine
can
do.
A
That's
why
it
provides
hooks
like
Arthur,
showed
earlier
to
customize
and
tweak
it
when
the
automated
version.
Isn't
you
know
what
what
it
needs
to
be
and
we're
also
working
on
some
future
updates
the
migration
to
make
a
more
clear
cut
for
what
we're
going
to
do
as
part
of,
for
example,
CIC
D
pipeline
I,
don't
know
if
anyone
wanted
add
to
that
I.
B
Think
there's
just
tons
of
improvements
that
we
can
do.
They
seem
pretty
Hardy
and
functional
I
mean
it
has
been
using
entity
framework
migrations
for
a
decade
now
to
manage
their
their
database.
It
does
take
some
care.
Sometimes
they
can't
do
everything,
but
it
can
do
basically,
whatever
you
can
do
in
sequel.
B
Another
thing
I'm
currently
working
on
right
now
is
rebuilding
some
tables
for
sequel.
Lite,
sequel
Lite
has
very
limited
support
for
these
operations.
It
doesn't
support
altering
a
column,
it
doesn't
support,
dropping
a
column.
All
you
can
do
is
add
columns
and
rename
columns,
and
so
one
of
the
things
we're
doing
is
to
behind
the
scenes,
rebuild
the
entire
table
to
make
those
things
just
work,
which
will
make
the
experience
way
better.
We
can
do
similar
things
on
sequel
server
like
we
saw
the
index
case
earlier
today.
B
C
I'm
back
going,
we
have
the
music
context,
reverse
engineer
from
the
database,
and
what
I
want
to
point
out
here
is
that
when
it's
reverse
engineered
there,
because
it
knew
that
it,
their
name
came
out
of
music
of
user
secrets.
It's
just
put
you
use
sequel
server,
name,
music
store
in
the
in
the
on
configuring,
so
this
is
not
putting
your
password
or
anything
else
that
might
be
secret
in
the
connection
string
into
your
scaffolded
configuration,
and
so
that's
a
much
better
way
of
doing
it.
C
Now,
we've
shown
in
a
previous
standup
Eric's
tools
and
here's
a
lot
more.
You
know
fine
great
and
control
over
these
kinds
of
things,
but
but
at
least
with
the
command-line
tools
so
which
you
can
use
on
Linux
like
I
am
at
the
moment
you
can
still
do
these
things
I'm
going
to
show
a
few
more
things
around
around
that
next,
so
you
also
notice
that
we
scaffolded
a
partial
class.
So
what
I'm
going
to
do
is
I'm
going
to
take
this
on
configuring
from
here.
C
You
know
move
it
from
there
and
I'm
going
to
go
back
to
where
my
program
is
and
I'm
going
to
say.
Ok,
let's
make
a
partial
class
here,
so
click
partial
class
music
store
context
and
then
put
the
on
configuring
in
here
bring
in
using
so
that
it
needs
so
now,
basically,
actually
also
I
have
some
code
to
run
an
actual
application.
C
So
let
me
find
that
so
again,
just
some
really
trivial
code
here
that
is
going
to
query
for
artists
and
albums
and
all
the
details
and
tell
me
how
many
total
album
orders
each
artist
has
so
nothing
it's
citing
in
this
query
and
then
run
through
the
artist
and
then
print
out
some
information
with
a
little
bit
of
link
to
objects
processing
there.
So
we
can
run
this
should
work.
Oh,
we
have
to
not
run
that
one,
that's
the
password
one,
but
we
can
run
this
and
I.
C
C
C
C
We
just
close
this
for
the
time
being.
Okay,
so
in
our
program
here
we
don't
have
anything,
that's
creating
this
web
post
builder,
so
we
don't
have
anything.
That's
creating
the
service
provider
that
I
configuration
is
going
to
be
in
that
user
secrets
is
going
to
use
to
put
in
there,
but
what
we
can
do
is-
and
that's
not.
C
Looking
at
and
saying
we
could
make
this
cleaner
for
what
I'm
doing
here
is
I'm
actually
building
this
the
host
builder,
calling
the
host
builder
and
building
it
in
order
to
get
the
services
out
and
then
I
can
go
into
my
on
configuring
here
and
in
addition
to
using
sequel,
server,
I
can
say,
use
application
service
Friday.
This
happens
automatically
when
you
do
add
dbcontext.
This
is
how
you
get
services
from
your
application
injected
into
EF.
So
a
DB
context
calls
this
automatically
I'm,
not
doing
a
DB
context.
C
C
Not
in
migration,
sorry,
the
reverse
engineering.
So
let's
go
back
to
terminal,
and
this
was
this
is
what
I
did
so
now.
If
I
now
rerun
this
first
thing,
it's
gonna
say
is
fail
because
there
already
exists
again.
Araki
J
stuff
is
better
at
this,
but
I
can
force
this.
So
what
I'm,
showing
here
is
basically
a
few
options
that
you
have
when
you're
doing
reverse
engineering,
so
that
forced
it
to
overwrite
everything.
C
Build
this
is
say:
oh
I'm,
configuring
with
the
same
parameter
types
and
that's
because
even
though
I
have
this
in
my
partial
class,
I
also
have
it
in
its
put
it
back
in
the
context.
So
I
could
remove
this
again
and
rebuild
and
do
it
again,
but
actually
you
don't
need
to
do
that.
What
we
can
do
at
least
started
with
the
F
core
five,
so
I
can
do
two
things.
One
I
can
say
no
on.
C
The
config
ring
no
I'm,
configuring
and
I
can
also
say
no
build.
Now.
No
build
has
been
there
for
a
while
we're
going
to
document
it
better,
its
user.
If
you
know
what
you
think,
if
you
know
what
sorry,
if
you
know
what
you're
doing-
and
you
know
that
you
don't
need
to
rebuild-
because
everything
that,
if
is
going
to
get
such
as
the
user
secrets
connection
string,
is
connect,
then
you
don't
have
to
deal
with
the
issues
of
making
a
bill
before
you
can
reverse
engineer
again.
C
So
hopefully,
this
will
now
get
me
back
into
a
good
state.
So
no
errors-
and
here
we
can
see
that
it
didn't
generate
on
configuring
at
all.
So
you
can
get
this
if
you've
got
your
connection
strings
being
set
up
and
your
configuration
setup
in
an
asp
net
application
without
DB
contacts,
for
instance,
then
you
can
avoid
was
putting
this
in
the
on
configuring
that
you
don't
want
in
there
at
all
okay,
so
this
should
still
run
yep.
C
C
Let's
look
at
the
error
message
that
it
produced.
It
was
an
error.
It
was
a
warning
I'll
get
there
so
compiling
a
query
slows
related
collections
for
more
than
one
collection,
navigation,
property,
either
fire
include
or
through
projection.
So
basically,
what
this
is
saying
is
I've
doing.
Multiple
collection
includes,
but
I'm
using
a
single
query.
This
is
something
we
changed
in
the
F
core.
Three,
a
single
query
will
always
be
consistent,
at
least
that's
what
we've.
Our
analysis
across
databases
has
shown.
C
However,
we
built
into
AF
core
5
the
ability
to
go
back
to
split
queries,
which
was
basically
the
default
before
EF
core
3,
and
so
we're
putting
this
warning
in
to
say:
hey,
you've,
written
a
query
here
which
might
be
slow
because
it's
using
multiple
includes
it
might
not
be
because
it
depends
on
other
factors
as
well.
So
what
we're
gonna
do
now
is
actually
go.
Look
at
the
perf
a
little
bit
and
again
I'm,
not
using
benchmark
net
location
like
you
should
be
using
for
doing
this.
C
A
C
In
the
logging,
so
when
you
use
asp
net
core
by
default
info
level
is
are
logged
and
we
put
queries
out
an
info
level.
So
when
I
ran
the
application,
because
I
had
done
that
thing
to
build
the
web
service
provider
or
to
build
the
hosts,
they
use
the
host
builder.
It
basically
set
up
logging
with
that
info
level,
so
you'll
get
that
same
behavior
for
any
asp
net
core
application
by
default
for
other
kinds
of
applications.
You
know,
if
you
configure
the
logging
in
many
ways
to
do
it,
you
can
get
it.
C
Again,
very
hacky,
so
we're
just
using
a
stopwatch
timer,
so
basically
I'm
starting
a
stopwatch
and
I'm
running
the
same
query.
I've
left
a
split
query
in
there
should
remove
that
I'm
running
the
same
query
multiple
times
actually
before
I
show
you
that
I
want
to
show
you
one
other
thing:
I
want
to
actually
show
you
using
a
split
query
before
we
look
at
the
perf,
so.
C
C
You
can
see
here
that
we're
doing
include
four
albums.
That's
a
collection
or
the
details,
that's
equation,
then
a
reference
and
a
to
list.
Okay.
So
if
we
think
that
single
query
is
the
correct
thing
for
this
and
we
want
you
have
to
stop
warning
on
list,
you
can
do
two
things
as
it
says
in
the
message.
C
You
can
switch
off
the
warning
or
you
can
make
it
throw
if
you,
because
you're
happy
with
that
behavior
or
you
can
change
the
default
at
the
context
level
to
say
always
do
single
queries
and
we'll
just
we'll
accept
that,
but
I
can
also
just
in
a
single
in
an
individual
query,
say
actually
I'm
doing
this
intentionally
as
a
single
query
and
then,
if
we
run
again
we'll
find
that
we
don't
get
the
warning
anymore,
but
we
still
get
the
same
query.
However,
if
we
decide
actually,
this
would
be
better
as
a
split
query.
D
Basically,
in
split
Farish
scenario:
we
want
to
load
the
related
data
from
other
tables,
but
we
do
not
want
to
generate
a
join
where
we
have
to
repeat
the
data
from
parent
site.
So
what
we
do
is
we
generate
the
very
first
query,
which
is
just
going
to
get
the
details
of
the
parent
or
the
query
root
you
asked
for
then
we
generate
another
query
which
is
going
to
do
an
inner
join
with
the
related
data
table.
So
this
inner
join
kind
of
acts
as
a
filter.
D
Another
thing
that
so
this
is
going
to
use
slick,
very
behavior
for
collection,
because
collections
have
cardinality
more
than
one
and
it
repeats
the
parent
rows
for
reference.
That
issue
does
not
arise,
so
any
reference
navigation
for
particular
entity
type
would
be
loaded
into
the
same
query.
So
in
this
collection,
you're
loading
also
a
reference
include
on
that.
Then.
The
second
query
for
this
collection
will
also
join
to
get
the
reference
data
back.
C
Excellent
thanks
Schmitt,
so
going
back
to
the
code.
Now
that
we've
looked
at
those
queries,
I'm
going
to
then
do
the
timing
thing
I
was
getting
ahead
of
myself.
So
again,
we're
doing
same
same
thing.
So
let's
run
it
as
a
split
query
or
as
a
sick.
Now,
let's
run
it
as
a
single
query.
First,
which
is
the
default.
So
I'll
just
comment
out
that
and
then
we're
going
to
run
this
500
times
just
to
get
an
idea
again
bench
that
mark.net
is
the
way
to
go.
C
It's
logging,
the
query
like
every
time,
every
500
times,
which
is
kind
of
annoying
so
because
the
query
logging,
as
we
just
talked
about,
is
on
by
default
with
this
configuration
so
I'm
going
to
just
do,
there's
plenty
of
ways.
You
could
change
this,
but
there's
a
kind
of
cool
little
trick
here,
so
we
can
use
configure
warnings.
C
So
let's
go
back
to
my
on
configuring,
so
here
we
can
do
configure
warnings
so
typically
configure
warnings
is
used
when
you
have
a
warning
that
you
either
want
to
ignore,
or
you
want
to
change
it
into
an
error,
so
you
could
do
throw
here,
but
the
interesting
thing
about
this
is
it
actually
works
for
any
event
that
we
produce
so
anything
that
we've
sent
to
the
logger.
You
can
change
what
we
do
for
that.
C
So
I
could
in
fact
make
this
one
throw
and
if
I
ran
then
as
soon
as
I
executed
the
query,
it
would
throw
an
exception
which
isn't
very
useful,
but
there
you
go.
What
is
useful
is
to
do
ignore
here
and
I'm
only
doing
it
on
this
one
event
ID
and
which
is
the
command
executed.
So
my
other
logging
is
still
going
to
come
out,
but
this
one
isn't
so
now,
when
I
run
again,
we've
suppressed
that
login
and
we
don't
get
it
trying
to
print
out
the
query
500
times
as
we
time
execution.
C
C
6.8
seconds,
so
it's
faster,
but
it's
not
much
faster
and
that's
a
very
important
point
about
this.
Just
because
you're
doing
multiple
collection
includes
doesn't
necessarily
mean
that
you're
going
to
have
really
bad
performance
because
it
also
depends
on
the
data
in
this
case,
there's
very
few
order
details
in
the
database,
and
so
you
don't
get
a
huge
amount
of
benefit
from
it
to
just
demonstrate
that
a
little
bit
I'm
gonna
run
a
bit
of
code.
That
just
adds
a
whole
bunch
of
orders
into
the
database.
C
C
And
now
run
again
so
now
we'll
run
it
once
and
then
just
to
make
sure
we're
being
fair,
we'll
run
will
run
again
without
the
add
some
orders
into
it
to
get
there
the
time
again.
So
it's
doing
the
timing
now
we'll
let
it
finish
and
then
we'll
just
run
it
again,
just
to
make
sure
that
we
get
a
good
split
query
time,
it's
taking
a
lot
longer
this
time,
so
this
site
took
13
seconds,
but
that
was
also
adding
some
orders
as
well.
C
C
You
should
look
at
your
individual
cases,
so
in
that
case
we
took
15,
which
is
still
not
hugely
different
between
the
two.
It's
it's
unfortunate
that
AI.
If
you
use
Northwind,
which
has
a
lot
of
data
and
collections,
you
can
make
it
be
50
times
faster
with
a
split
include.
So
this
isn't
necessarily
the
best
example
of
that,
but
it
does
show
how
the
relative
difference
changes
when
you
use
a
split
include,
as
opposed
to
a
non
split,
include
I.
C
Well,
I
probably
won't
get
to
do
most
of
the
other
stuff
then
so
maybe
we
should
just
end
there.
The
other
stuff
I
was
going
to
show
was
refactoring
of
entities
using
constructors
using
private
fields.
Things
like
that,
but
a
little
hiccup
in
the
middle
I
think
made
us
run
a
bit
long.
So
so
yeah
we've.
Let
questions
we
can
answer
for
the
last
few
minutes
or
comments
from
people
on
the
team.
So.
B
It's
a
one
question
about
how
to
do
sort
of
zero
downtime
deployments,
and
this
is
another
lesson
learned
kind
of
by
the
team.
There's
a
strategy
called
expand
contract
where
every
sort
of
schema
change
you
make.
You
do
in
two
steps.
The
first
step
sort
of
expands,
the
schema,
so
you
add
tables
in
a
non
non-destructive
way.
So
you
don't
drop
anything
you
keep.
B
The
old
schema
completely
compatible
with
the
new
schema,
and
so,
while
all
your
servers
are
running,
it
can
continue
to
access
the
database
and
then,
once
all
your
servers
are
kind
of
moved
to
the
next
version
of
of
your
app.
You
can
then
do
those
destructive
changes
once
everything
else
is
caught
up.
So
that's
a
very
good
strategy.
You
can
use
for
the
no
downtime.
A
C
Split
include
is
definitely
about
pulling
in
the
performance
of
pulling
improving
the
performance
of
related
data,
but
like
it's
mostly
when
most
of
the
cases
you'll
see
it
useful
being
useful
are
when
you
have.
Multiple
collection
includes
so
you're
doing
and
include,
and
then
another
include
for
another
in
collection
or
then
include
for
a
collection.
So
in
those
cases
is
where
it's
going
to
be
really
beneficial,
but
again
it
shows
the
most
the
most
difference.
A
C
D
D
A
C
So
compile
queries
are
not
highest
priority
and
that's
because
the
auto
compilation
of
queries
that
happens
whenever
you,
whenever
you
do
any
query
any
F,
whether
you
use
come
the
compiled
query,
API
or
not.
Well,
if
you
use
a
comma
query,
it
doesn't
but
be
Auto
compiled
everything
that
works
pretty
well,
and
we
see
a
lot
less
demand
for
a
need
for
the
explicitly
compile
queries.
We
do
still
want
to
make
some
improvements
to
the
API
surface,
especially
there,
but
it's
it's
not
one
of
our
priorities.