Это мой первый опыт работы с Entity Framework (EF), и я пытаюсь узнать, что именно выполняет запрос в моей базе данных, а что нет.Попытка выяснить, когда выполняются запросы в Entity Framework
Это код, с которым я работаю. Не обращайте внимания на функциональность, это не важно для этого вопроса.
using (var db = new Context())
{
//Check if any reviews have been given.
if (combinedReviews.Any())
{
var restaurantsReviewedIds = combinedReviews.Select(rev => rev.RestaurantId);
//(1)
ratedRestaurants = db.Restaurants.Where(rest => restaurantsReviewedIds.Contains(rest.Id))
.DistinctBy(rest => rest.Id)
.ToList();
}
//(2)
var restsClose = db.Restaurants.Where(rest => db.Reviews.Any(rev => rev.RestaurantId == rest.Id))
.OrderBy(rest => rest.Location.Distance(algorithmParams.Location))
.Take(algorithmParams.AmountOfRecommendations);
//(3)
tempList = ratedRestaurants.Union(restsClose).ToList();
var tempListIds = tempList.Select(rest => rest.Id); //Temporary list.
//(4)
restsWithAverage = db.Reviews.Where(rev => tempListIds.Contains(rev.RestaurantId))
.GroupBy(rev => rev.RestaurantId)
.ToList();
}
Я отметил каждую часть кода цифрами, поэтому я буду называть их этим. Ниже я думаю, что это происходит.
Это выполняет запрос, так как я звоню
.ToList()
здесь.Это возвращает
IQueryable
, поэтому это не будет выполнять запрос к базе данных.Выполняет запрос (2).
Выполняется другой запрос, так как я звоню
.ToList()
.
Как близко к истине я? Все ли это правильно? Если это не имеет смысла, не могли бы вы привести пример, который выполняет запрос, а что нет?
Извините, что задал столько вопросов в одном вопросе, но я думал, что мне не нужно создавать так много вопросов, потому что все это касается одной темы.
«Попытка выяснить, как работает платформа Entity Framework» - как долго у вас есть! – Nick
_ «Объясните для каждого из этих фрагментов, выполняются ли они запрос базы данных« _ (моя интерпретация вашего вопроса), не является полезным вопросом.Что, если вы напишете еще один фрагмент кода, вы собираетесь задать новый вопрос? Вместо этого задайте вопрос, на который вы действительно хотите получить ответ. – CodeCaster
@CodeCaster Я просто хочу выяснить, когда запросы выполняются в базе данных. Я новичок в EF, поэтому я не уверен, что произойдет. Я не хочу выполнять 3 запроса, когда я могу объединить их в 1. Я лучше сформулирую свой вопрос. – RandomStranger