Объекты, созданные контекстом, сохраняют ссылку на этот контекст для отложенной загрузки и отслеживания изменений.Если вы собираетесь кэшировать сущность, вы должны удалить ссылку на этот контекст, отсоединив ее (поскольку контекст побочного эффекта не будет GCed, пока у сущности нет других ссылок).
Так что если вы собираетеськэшируйте его, отсоедините его следующим образом
context.Entry(user).State = EntityState.Detached;
Затем внутри вашего GetFromCache()
вам необходимо присоединить сущность к текущему контексту.В противном случае EF вставит новую запись для объекта пользователя.
User GetFromCache()
{
var user = /* retrieve from cache */
if (user != null)
{
context.Users.Attach(user);
}
else
{
//get user from database
}
return user;
}