private async Task UpdateContents(JsonVersions jsonVersions, DataVersions dataVersions) { var jsonContents = await _sourceDataProvider.JsonContentSummariesAndDetails(); _localDataProvider.UnzipImages(await _sourceDataProvider.Images()); foreach (var(summary, detail) in jsonContents) { _localDataProvider.UnzipImages(await _sourceDataProvider.Images(summary?.ContentId)); } using (var db = DataBaseHelper.CreateConnection()) { var dbSummaries = _localDataProvider.ContentSummaries(db).ToList(); var dbDetails = _localDataProvider.ContentDetails(db).ToList(); foreach (var(summary, detail) in jsonContents) { var dbSummary = dbSummaries.Where(d => d.ContentId == summary.ContentId).FirstOrDefault() ?? new ContentSummaryEntity(); var dbDetail = dbDetails.Where(d => d.ContentId == detail.ContentId).FirstOrDefault() ?? new ContentDetailEntity(); dbSummaries.Remove(dbSummary); dbDetails.Remove(dbDetail); _localDataProvider.InsertOrReplace(db, PropertyCopier.CopyTo(summary, dbSummary)); _localDataProvider.InsertOrReplace(db, PropertyCopier.CopyTo(detail, dbDetail)); } foreach (var dbSummary in dbSummaries) { db.Delete(dbSummary); } foreach (var dbDetail in dbDetails) { db.Delete(dbDetail); } // バージョン dataVersions.Entity.Contents = jsonVersions.Json.Contents; _localDataProvider.InsertOrReplace(db, dataVersions.Entity); } }