Мне нужно извлечь некоторые данные из внешнего API и вставить их в свою базу данных с помощью EF Core. Данные, которые я получаю в ответ, связаны между собой. Мне нужно использовать идентификаторы (которые также приходят от меня из API), чтобы создать некоторые отношения с этими объектами. Ниже я прикрепляю фрагмент с методом, ответственным за создание этих отношений:
private IList<LeagueEntity> CombineLeaguesWithGames(IList<LeagueEntity> leagues,
IList<GameEntity> games)
{
if (leagues != null && games != null)
{
foreach (var league in leagues)
{
league.Games = games.Where(g => g.LeagueId == league.LeagueId).ToList();
foreach (var team in league.Teams)
{
team.HomeGames = games.Where(g => g.HomeTeam.TeamId == team.TeamId).ToList();
team.AwayGames = games.Where(g => g.AwayTeam.TeamId == team.TeamId).ToList();
team.TeamId = 0;
}
league.LeagueId = 0;
}
foreach (var game in games)
{
game.GameId = 0;
game.HomeTeam = null; // to avoid repetitions
game.AwayTeam = null;
}
}
return leagues;
}
Как вы заметили, я должен установить id каждого отдельного объекта равным 0, прежде чем вставить его в мою базу данных. Причина в том, что я не могу вставить явное значение ключа в мои таблицы. Мне не очень нравится это решение, есть ли более элегантный способ игнорировать значение id перед вставкой и позволить базе данных найти его при сохранении изменений? Сценарий sql «SET IDENTITY_INSERT ... ON / OFF» не подходит для моей проблемы, потому что только одна таблица может иметь вставку идентификатора одновременно, и мне нужно вставить связанные данные.