Как игнорировать значение ключа при вставке данных в базу данных в EF Core? - PullRequest
1 голос
/ 09 апреля 2020

Мне нужно извлечь некоторые данные из внешнего 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» не подходит для моей проблемы, потому что только одна таблица может иметь вставку идентификатора одновременно, и мне нужно вставить связанные данные.

...