Que diferença faz o .AsNoTracking ()?

Eu tenho uma pergunta sobre o.AsNoTracking() extensão, como isso é tudo muito novo e bastante confuso.

Estou usando um contexto por solicitação para um website.

Muitas das minhas entidades não mudam, portanto, não precisam ser rastreadas, mas tenho o seguinte cenário em que não tenho certeza do que está acontecendo com o banco de dados ou mesmo se isso faz diferença nesse caso.

Este exemplo é o que estou fazendo atualmente:

context.Set<User>().AsNoTracking()
// Step 1) Get user
context.Set<User>()
// Step 2) Update user

Isto é o mesmo que acima, mas removendo o.AsNoTracking() da etapa 1:

context.Set<User>();
// Step 1) Get user
context.Set<User>()
// Step 2) Update user

As Etapas 1 e 2 usam o mesmo contexto, mas ocorrem em momentos diferentes. O que não consigo descobrir é se existe alguma diferença. Como o Passo 2 é uma atualização, acredito que ambos irão acessar o banco de dados duas vezes.

Alguém pode me dizer qual é a diferença?

questionAnswers(6)

yourAnswerToTheQuestion