Exemplo n.º 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();
        }
Exemplo n.º 2
0
 // --------------------------------------------------------------------
 // 標準的な計算方法で算出される DisplayCategoryName
 // --------------------------------------------------------------------
 public static String?DisplayCategoryNameByDefaultAlgorithm(String?displayCategoryName, String?categoryId)
 {
     if (displayCategoryName == null && categoryId != null)
     {
         using MusicInfoContextDefault musicInfoContextDefault = new();
         displayCategoryName = DbCommon.SelectBaseById(musicInfoContextDefault.Categories, categoryId)?.Name;
     }
     return(displayCategoryName);
 }
Exemplo n.º 3
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();
        }
Exemplo n.º 4
0
        // ====================================================================
        // コンストラクター
        // ====================================================================

        // --------------------------------------------------------------------
        // メインコンストラクター
        // --------------------------------------------------------------------
        public TFoundSetter(ListContextInMemory listContextInMemory)
        {
            Debug.Assert(listContextInMemory.ChangeTracker.QueryTrackingBehavior == QueryTrackingBehavior.TrackAll, "TFoundSetter() bad QueryTrackingBehavior");
            _listContextInMemory = listContextInMemory;

            // MusicInfoContext は検索専用なので NoTracking にする
            _musicInfoContext = new MusicInfoContextDefault();
            _musicInfoContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;

            _categoryNames = DbCommon.SelectCategoryNames(_musicInfoContext.Categories);

            // スマートトラック判定用単語
            _offVocalWords  = YlConstants.SMART_TRACK_SEPARATOR + String.Join(YlConstants.SMART_TRACK_SEPARATOR, YlModel.Instance.EnvModel.YlSettings.OffVocalWords) + YlConstants.SMART_TRACK_SEPARATOR;
            _bothVocalWords = YlConstants.SMART_TRACK_SEPARATOR + String.Join(YlConstants.SMART_TRACK_SEPARATOR, YlModel.Instance.EnvModel.YlSettings.BothVocalWords) + YlConstants.SMART_TRACK_SEPARATOR;
        }
Exemplo n.º 5
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();
        }