Для быстрого и простого решения вы можете использовать объект HttpContext.Session
для хранения значения, подобного этому:
int distance;
if(Session["distance"] == null)
{
distance = GetKilometers(vehicleId);
Session["distance"] = distance;
}
else
{
distance = Convert.ToInt32(Session["distance"]);
}
Чтобы сделать это еще проще, вы можете абстрагировать это в свой собственный метод.
EDIT
Приведенное выше решение подходит для минимального объема данных. Учитывая тот факт, что в вашем случае будет храниться МНОГО данных, я вижу два возможных сценария:
Расчетные данные для транспортного средства X различны для каждого пользователя
Кэшируйте вычисленные данные в отдельной таблице в базе данных с помощью UserId (или SessionId), VehicleId и CalculatedData.
Расчетные данные для транспортного средства X одинаковы для любого пользователя, которому нужны данные транспортного средства X
Кэш, который рассчитал данные в столбце таблицы транспортных средств в базе данных.
В любом случае, ваш вызов в базу данных должен получить данные для всех транспортных средств, которые нужны пользователю для текущего запроса. Затем сохраните эти данные в локальной переменной, которая живет только для текущего запроса. Если вы собираетесь кэшировать данные по сеансам, вы можете использовать HttpContext.Session для хранения SessionId и использовать его для извлечения данных из базы данных.