コード例 #1
0
        // --------------------------------------------------------------------
        // キャッシュ更新(追加)
        // records の ParentFolder はすべて同じ前提
        // --------------------------------------------------------------------
        public void UpdateCache(List <TFound> records)
        {
            String parentFolder = records.First().ParentFolder;

            // 追加しようとしているキャッシュと同じ親フォルダーの旧キャッシュ削除
            IQueryable <TFound> removes = Founds.Where(x => x.ParentFolder == parentFolder);

            Founds.RemoveRange(removes);

            // 追加しようとしているキャッシュとドライブレターが異なるキャッシュ削除
            removes = Founds.Where(x => !x.ParentFolder.Contains(YlCommon.DriveLetter(parentFolder)));
            Founds.RemoveRange(removes);
            SaveChanges();

            // 新キャッシュ追加
            foreach (TFound record in records)
            {
                // Uid を初期化して自動的に Uid を振ってもらうようにする
                record.Uid = 0;
            }
            Founds.AddRange(records);

            // キャッシュ管理テーブル更新
            TCacheHeader?cacheHeader = CacheHeaders.FirstOrDefault(x => x.ParentFolder == parentFolder);
            Boolean      needAdd     = false;

            if (cacheHeader == null)
            {
                cacheHeader = new()
                {
                    ParentFolder = parentFolder,
                };
                needAdd = true;
            }
            cacheHeader.UpdateTime = YlCommon.UtcNowMjd();
            if (needAdd)
            {
                CacheHeaders.Add(cacheHeader);
            }

            SaveChanges();
        }