У меня есть данные в двух таблицах в базе данных SQL. У меня EF Core 2.0 сидит сверху. У меня есть метод, который принимает результаты листа Google, и будет сравнивать со значениями в базе данных. Прямо сейчас я вижу, что в моем цикле for выполняется отдельный запрос на выборку для каждого сравнения. Я попытался сделать .Load () для обеих рассматриваемых таблиц, но это, похоже, не дало эффекта. Как заставить EF Core полагаться на данные в памяти и избежать всех дополнительных обращений к БД?
public async Task UpdateRatingsFromGoogleDoc(IList<IList<object>> values)
{
bool dirty = false;
if (values != null && values.Count > 0)
{
//Tried this but hasn't helped
_myDb.Users.Load();
_myDb.RatingInfo.Load();
foreach (var row in values)
{
string lastName = (string)row[0];
string firstName = (string)row[1];
string ratingRawVal = (string)row[3];
int rating = 0;
if (ratingRawVal != "Rec")
if (!(int.TryParse(ratingRawVal, out rating)))
continue;
var userQuery = _myDb.Users.Where(u => u.FirstName == firstName && u.LastName == lastName);
if (userQuery.Count() == 1)
{
var userId = userQuery.FirstOrDefault().Id;
var member = _myDb.RatingInfo.Where(f => f.UserId == userId).FirstOrDefault();
if (member.Rating != rating)
{
member.Rating = rating;
member.RatingIsEstimate = false;
member.RatingSetTime = DateTime.Now;
dirty = true;
}
}
}
if (dirty)
await _myDb.SaveChangesAsync();
}
}
Обновление: я также пытался _myDb.Users.Include (u => u.RatingInfos) .Load ();
это также не похоже на работу.