private void InternalCopyFileData(MediaFile file, MediaFile copy) { _storageProvider.Save(copy, MediaStorageItem.FromStream(_storageProvider.OpenRead(file))); _imageCache.Delete(copy); using (var scope = new DbContextScope(_fileRepo.Context, autoCommit: false)) { // Tags. _fileRepo.Context.LoadCollection(file, (MediaFile x) => x.Tags); var existingTagsIds = copy.Tags.Select(x => x.Id).ToList(); foreach (var tag in file.Tags) { if (!existingTagsIds.Contains(tag.Id)) { copy.Tags.Add(tag); existingTagsIds.Add(tag.Id); } } // Localized values. var languages = _languageService.GetAllLanguages(true); foreach (var language in languages) { var title = file.GetLocalized(x => x.Title, language.Id, false, false).Value; if (title.HasValue()) { _localizedEntityService.SaveLocalizedValue(copy, x => x.Title, title, language.Id); } var alt = file.GetLocalized(x => x.Alt, language.Id, false, false).Value; if (alt.HasValue()) { _localizedEntityService.SaveLocalizedValue(copy, x => x.Alt, alt, language.Id); } } scope.Commit(); _fileRepo.Context.DetachEntities <MediaTag>(); } }