// -------------------------------------------------------------------- // 紐付テーブルをインポート // -------------------------------------------------------------------- private void ImportSequenceTable <T>(DbSet <T> recordsExport, DbSet <T> recordsDefault, MusicInfoContextDefault musicInfoContextDefault) where T : class, IRcSequence { _descriptionSetter(YlConstants.MUSIC_INFO_TABLE_NAME_LABELS[DbCommon.MusicInfoTableIndex <T>()] + "情報をインポート中..."); List <T> resultsExport = recordsExport.Where(x => !x.Invalid).ToList(); foreach (T resultExport in resultsExport) { // インポート後に Dirty になるようにフラグをセットしておく resultExport.Dirty = true; // 同じ Id かつ同じ連番があるか T?sameIdRecord = recordsDefault.FirstOrDefault(x => x.Id == resultExport.Id && x.Sequence == resultExport.Sequence); if (sameIdRecord != null) { // 同じ Id かつ同じ連番がある場合は上書き Common.ShallowCopyFields(resultExport, sameIdRecord); continue; } // 新規挿入 recordsDefault.Add(resultExport); } _cancellationToken.ThrowIfCancellationRequested(); musicInfoContextDefault.SaveChanges(); }
// -------------------------------------------------------------------- // マスターテーブルをインポート // -------------------------------------------------------------------- private void ImportMasterTable <T>(DbSet <T> recordsExport, DbSet <T> recordsDefault, MusicInfoContextDefault musicInfoContextDefault) where T : class, IRcMaster { _descriptionSetter(YlConstants.MUSIC_INFO_TABLE_NAME_LABELS[DbCommon.MusicInfoTableIndex <T>()] + "情報をインポート中..."); List <T> resultsExport = recordsExport.Where(x => !x.Invalid).ToList(); foreach (T resultExport in resultsExport) { // インポート後に Dirty になるようにフラグをセットしておく resultExport.Dirty = true; // 同じ Id があるか T?sameIdRecord = DbCommon.SelectBaseById(recordsDefault, resultExport.Id, true); if (sameIdRecord != null) { // 同じ Id がある場合、_importSameName なら上書き if (_importSameName) { Common.ShallowCopyFields(resultExport, sameIdRecord); } continue; } // 同じ名前があるか List <T> sameNameRecords = recordsDefault.Where(x => x.Name == resultExport.Name).ToList(); if (sameNameRecords.Any()) { if (_importSameName) { T?sameKeywordRecord = sameNameRecords.FirstOrDefault(x => x.Keyword == null && resultExport.Keyword == null || x.Keyword != null && x.Keyword == resultExport.Keyword); if (sameKeywordRecord != null) { // _importSameName かつ同じキーワードがある場合は上書き Common.ShallowCopyFields(resultExport, sameKeywordRecord); continue; } else { // _importSameName かつ同じキーワードがない場合は、ここでは何もせず新規挿入に進む } } else { // _importSameName でない場合は何もしない continue; } } // 新規挿入 recordsDefault.Add(resultExport); } _cancellationToken.ThrowIfCancellationRequested(); musicInfoContextDefault.SaveChanges(); }
// -------------------------------------------------------------------- // 別名テーブルをインポート // -------------------------------------------------------------------- private void ImportAliasTable <T>(DbSet <T> recordsExport, DbSet <T> recordsDefault, MusicInfoContextDefault musicInfoContextDefault) where T : class, IRcAlias { _descriptionSetter(YlConstants.MUSIC_INFO_TABLE_NAME_LABELS[DbCommon.MusicInfoTableIndex <T>()] + "情報をインポート中..."); List <T> resultsExport = recordsExport.Where(x => !x.Invalid).ToList(); foreach (T resultExport in resultsExport) { // インポート後に Dirty になるようにフラグをセットしておく resultExport.Dirty = true; // 同じ Id があるか T?sameIdRecord = DbCommon.SelectBaseById(recordsDefault, resultExport.Id, true); if (sameIdRecord != null) { // 同じ Id がある場合、_importSameName なら上書き if (_importSameName) { Common.ShallowCopyFields(resultExport, sameIdRecord); } continue; } // 同じ別名があるか T?sameAliasRecord = DbCommon.SelectAliasByAlias(recordsDefault, resultExport.Alias, true); if (sameAliasRecord != null) { // 同じ別名がある場合、_importSameName なら上書き if (_importSameName) { Common.ShallowCopyFields(resultExport, sameAliasRecord); } continue; } // 新規挿入 recordsDefault.Add(resultExport); } _cancellationToken.ThrowIfCancellationRequested(); musicInfoContextDefault.SaveChanges(); }