Я изучаю Core Entity Framework и начинаю с использования первого подхода кода при чтении этого руководства https://docs.efproject.net/en/latest/platforms/aspnetcore/new-db.html, за исключением разных моделей.Как загрузить связанные объекты с помощью платформы Entity Framework Core
В EF6 у него была ленивая загрузка, и я смог легко потянуть связанные объекты, но в EF Core он не работает. Мне было интересно, как это сделать, или если есть работа, чтобы заставить ее работать.
Вот пример того, что два моих моделей выглядит следующим образом:
public class Team
{
public string Id { get; set; }
public string Name { get; set; }
public string Icon { get; set; }
public string Mascot { get; set; }
public string Conference { get; set; }
public int NationalRank { get; set; }
public List<Game> Games { get; set; }
}
public class Game
{
public string Id { get; set; }
public string Opponent { get; set; }
public string OpponentLogo { get; set; }
public string GameDate { get; set; }
public string GameTime { get; set; }
public string TvNetwork { get; set; }
public string TeamId { get; set; }
public Team Team { get; set; }
}
Я желающей получить все игры для команды, но по состоянию на сейчас она равна нулю.
Я решил создать проект Web Api, поэтому у меня есть контроллер под названием TeamsController, и когда я делаю запрос GET контроллеру, я хочу получить список команд с имуществом Games, связанным с играми.
Вот что я пробовал:
[HttpGet]
public async Task<List<Team>> Get()
{
return await _context.Teams.Include(t => t.Games).ToListAsync();
}
Это результат JSON:
[
{
"id": "007b4f09-d4da-4040-be3a-8e45fc0a572b",
"name": "New Mexico",
"icon": "lobos.jpg",
"mascot": "New Mexico Lobos",
"conference": "MW - Mountain",
"nationalRank": null,
"games": [
{
"id": "1198e6b1-e8ab-48ab-a63f-e86421126361",
"opponent": "vs Air Force*",
"opponentLogo": "falcons.jpg",
"gameDate": "Sat, Oct 15",
"gameTime": "TBD ",
"tvNetwork": null,
"teamId": "007b4f09-d4da-4040-be3a-8e45fc0a572b"
}
]
}
]
Когда я делаю это:
[HttpGet]
public async Task<List<Team>> Get()
{
return await _context.Teams.ToListAsync();
}
я все команды, но свойство Games равно null.
Я надеялся, что он вернет все команды в базе данных вместе со всеми играми для каждой команды. Как я могу заставить это работать?
Согласно [this] (https://docs.efproject.net/en/latest/querying/related-data.html), ленивая загрузка еще не реализована. – Michael
Также имейте в виду, что ленивая загрузка может вызвать проблемы с производительностью, в зависимости от того, сколько команд у вас будет. При ленивой загрузке у вас будет '1 + n = <вызовы в базу данных>' где 'n' - количество команд в базе данных. – Michael
@Michael В разделе «Забытая загрузка» в статье говорится, что вы можете использовать .Include(), который я пробовал, но по какой-то причине он возвращает только первую команду и первую игру первой команды. Как показано на выходе json. Вы случайно не знаете, почему он не получает все результаты? – Aaron