Exemple #1
0
        // --------------------------------------------------------------------
        // 紐付テーブルをインポート
        // --------------------------------------------------------------------
        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();
        }
Exemple #2
0
        // --------------------------------------------------------------------
        // マスターテーブルをインポート
        // --------------------------------------------------------------------
        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();
        }
Exemple #3
0
        // --------------------------------------------------------------------
        // 別名テーブルをインポート
        // --------------------------------------------------------------------
        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();
        }