Skip to content

Repositories: Optimize repository caches to populate for both int and GUID keys#21124

Merged
AndyButland merged 8 commits intomainfrom
v17/improvement/optimize-repository-caches-across-int-and-guid-keys
Dec 15, 2025
Merged

Repositories: Optimize repository caches to populate for both int and GUID keys#21124
AndyButland merged 8 commits intomainfrom
v17/improvement/optimize-repository-caches-across-int-and-guid-keys

Conversation

@AndyButland
Copy link
Contributor

@AndyButland AndyButland commented Dec 11, 2025

Summary

  • Optimizes DocumentRepository and MediaRepository to populate both the int-keyed and GUID-keyed caches when entities are saved or retrieved
  • Previously, retrieving an entity by int ID would not populate the GUID cache (and vice versa), causing unnecessary database hits when the same entity was subsequently accessed by the other key type
  • Now, regardless of which identifier type is used to fetch or save an entity, both caches are populated, eliminating redundant database queries

The trigger for this update was some performance analysis done on save and publish comparing 13 to 17. One downside of the newer version is that we are making more use of requests by key now. But still not solely whilst we have the option to request by integer ID as well. This has a downside in that a request by Id followed by a request by Key, or vice versa, would both initially hit the database. With these updates a request for one will cache for the other, meaning a subsequent request either by Id or Key will get a cached response.

Changes

DocumentRepository:

  • Override Save() to populate GUID cache after saving
  • Modify PerformGet(int) to populate GUID cache after retrieval
  • Modify PerformGetAll(int[]) to populate GUID cache after retrieval
  • Add PopulateCacheById() methods to populate int cache from GUID lookups
  • Modify ContentByGuidReadRepository.PerformGet(Guid) and PerformGetAll(Guid[]) to populate int cache

MediaRepository:

  • Same pattern applied as DocumentRepository

Cache key generation:

  • Use RepositoryCacheKeys.GetKey<T>() for consistent cache key generation across all cache population methods

Test plan

  • Verify Retrievals_By_Id_And_Key_After_Save_Are_Cached passes for both Document and Media repositories
  • Verify Retrieval_By_Key_After_Retrieval_By_Id_Is_Cached passes for both repositories
  • Verify Retrieval_By_Id_After_Retrieval_By_Key_Is_Cached passes for both repositories
  • Verify all existing DocumentRepositoryTest tests pass (30 tests)
  • Verify all existing MediaRepositoryTest tests pass (23 tests)

🤖 Generated with Claude Code and human updates.

Copilot AI review requested due to automatic review settings December 11, 2025 11:43
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR optimizes repository caching for DocumentRepository and MediaRepository by ensuring both int-keyed and GUID-keyed caches are populated whenever entities are saved or retrieved. Previously, fetching by int ID would only populate the int cache, and fetching by GUID would only populate the GUID cache, leading to redundant database queries when the same entity was accessed using a different key type.

Key changes:

  • Added dual cache population logic to Save(), PerformGet(), and PerformGetAll() methods in both repositories
  • Refactored existing cache tests into three comprehensive scenarios that verify caching works correctly for all access patterns
  • Updated cache policy classes to use consistent RepositoryCacheKeys.GetKey<T>() helper method

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
DocumentRepositoryTest.cs Refactored cache test into three separate tests that verify caching after save, retrieval by ID→Key, and retrieval by Key→ID
MediaRepositoryTest.cs Refactored cache test into three separate tests that verify caching after save, retrieval by ID→Key, and retrieval by Key→ID
DocumentRepository.cs Added Save() override and modified PerformGet()/PerformGetAll() to populate both int and GUID caches; added PopulateCacheById() helper methods
MediaRepository.cs Added Save() override and modified PerformGet()/PerformGetAll() to populate both int and GUID caches; added PopulateCache() helper methods; removed unused using statement
DefaultRepositoryCachePolicy.cs Updated to use RepositoryCacheKeys.GetKey<TEntity>() for consistent cache key generation
FullDataSetRepositoryCachePolicy.cs Updated to use RepositoryCacheKeys.GetKey<TEntity>() for consistent cache key generation
Comments suppressed due to low confidence (4)

src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentRepository.cs:264

  • The fully qualified namespace Core.Persistence.Repositories.RepositoryCacheKeys is unnecessary since using Umbraco.Cms.Core.Persistence.Repositories; is already declared at line 15. For consistency with the rest of the PR (lines 1652, 1756), this should be simplified to just RepositoryCacheKeys.
                    IsolatedCache.GetCacheItem<IContent>(RepositoryCacheKeys.GetKey<IContent, int>(dto.NodeId));

src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentRepository.cs:1407

  • The fully qualified namespace Core.Persistence.Repositories.RepositoryCacheKeys is unnecessary since using Umbraco.Cms.Core.Persistence.Repositories; is already declared at line 15. For consistency with the rest of the PR (lines 1652, 1756), this should be simplified to just RepositoryCacheKeys.
        IsolatedCache.ClearByKey(RepositoryCacheKeys.GetKey<IContent, Guid>(entity.Key));

src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MediaRepository.cs:164

  • The fully qualified namespace Core.Persistence.Repositories.RepositoryCacheKeys is unnecessary since using Umbraco.Cms.Core.Persistence.Repositories; is already declared at line 13. For consistency with the rest of the PR (lines 631, 735), this should be simplified to just RepositoryCacheKeys.
                    IsolatedCache.GetCacheItem<IMedia>(RepositoryCacheKeys.GetKey<IMedia, int>(dto.NodeId));

src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MediaRepository.cs:570

  • The fully qualified namespace Core.Persistence.Repositories.RepositoryCacheKeys is unnecessary since using Umbraco.Cms.Core.Persistence.Repositories; is already declared at line 13. For consistency with the rest of the PR (lines 631, 735), this should be simplified to just RepositoryCacheKeys.
        IsolatedCache.ClearByKey(RepositoryCacheKeys.GetKey<IMedia, Guid>(entity.Key));

AndyButland and others added 2 commits December 11, 2025 12:57
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@AndyButland AndyButland changed the title Optimize repository caches to populate both int and GUID keys Repositories: Optimize repository caches to populate for both int and GUID keys Dec 11, 2025
Copy link
Member

@Zeegaan Zeegaan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall looks good, just a few naming comments 😁 Love the tests too 💪

AndyButland and others added 2 commits December 12, 2025 13:59
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
@AndyButland AndyButland requested a review from Zeegaan December 12, 2025 13:11
Copy link
Member

@Zeegaan Zeegaan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me now 💪

@AndyButland AndyButland merged commit 63fd7dd into main Dec 15, 2025
25 of 26 checks passed
@AndyButland AndyButland deleted the v17/improvement/optimize-repository-caches-across-int-and-guid-keys branch December 15, 2025 06:18
alexsee pushed a commit to alexsee/umbraco-container that referenced this pull request Jan 18, 2026
Updated
[Umbraco.Cms.Persistence.Sqlite](https://github.com/umbraco/Umbraco-CMS)
from 17.0.2 to 17.1.0.

<details>
<summary>Release notes</summary>

_Sourced from [Umbraco.Cms.Persistence.Sqlite's
releases](https://github.com/umbraco/Umbraco-CMS/releases)._

## 17.1.0

# What's Changed Since 17.1.0-rc

### 🐛 Bug Fixes
* Media: Fix files not deleted from disk when recycle bin protection is
enabled by @​AndyButland in
umbraco/Umbraco-CMS#21309
* Document Editing: Refactor of Fix property variation change breaking
document save via Infinite Editing (closes #​21195) by @​nielslyngsoe in
umbraco/Umbraco-CMS#21293
* umbraco/Umbraco-CMS#21306 by @​calm329 in
umbraco/Umbraco-CMS#21306

**Full Changelog**:
umbraco/Umbraco-CMS@release-17.1.0-rc...release-17.1.0

## What's Changed Since the Last Release (17.0.2)

### 📦 Dependencies
* Dependencies: Fixed dependency conflicts when installing
Microsoft.EntityFrameworkCore.Design (closes #​20421) by @​lauraneto in
umbraco/Umbraco-CMS#20474
* Dependencies: Remove `Microsoft.CodeAnalysis.CSharp` dependency from
Umbraco.Infrastructure by @​lauraneto in
umbraco/Umbraco-CMS#20481
* build(deps): bumps @​umbraco-ui/uui from 1.16.0-rc.0 to 1.16.0 by
@​iOvergaard in umbraco/Umbraco-CMS#20535
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Client by
@​dependabot[bot] in umbraco/Umbraco-CMS#20580
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Login by
@​dependabot[bot] in umbraco/Umbraco-CMS#20621
* Bump playwright and @​playwright/test in
/tests/Umbraco.Tests.AcceptanceTest by @​dependabot[bot] in
umbraco/Umbraco-CMS#20579
* Bump the npm_and_yarn group across 2 directories with 1 update by
@​dependabot[bot] in umbraco/Umbraco-CMS#20863
* Dependencies: Updates some dependencies to latest minor or patch
releases by @​AndyButland in
umbraco/Umbraco-CMS#20953
* build(deps): bumps monaco-editor from 0.54.0 to 0.55.1 by @​iOvergaard
in umbraco/Umbraco-CMS#21054

### 🌈 Accessibility Improvements
* Entity Actions: Create button discernible text (fixes #​20205) by
@​OskarKruger in umbraco/Umbraco-CMS#20434
* Entity Actions: More create button discernible text, extension of
#​20434 by @​OskarKruger in
umbraco/Umbraco-CMS#20458
* Header: Adjusted button focus border color contrast by @​MrHutmat in
umbraco/Umbraco-CMS#20562
* Login: Added custom validation for missing password and user/email on
the login form by @​MrHutmat in
umbraco/Umbraco-CMS#20233
* Accessibility: Adding a label attribute for `<uui-button>` in news
dashboard by @​MrHutmat in
umbraco/Umbraco-CMS#20780
* Keyboard navigation: Return to opening element after modal close by
@​MrHutmat in umbraco/Umbraco-CMS#20782

### 🚀 New Features
* Preview: Allows changing the preview environment inside the preview
app, and other UX changes that enhance the experience by @​leekelleher
in umbraco/Umbraco-CMS#20598
* Login: Adds show/hide password toggle by @​MrHutmat in
umbraco/Umbraco-CMS#20611
* Adds Clear Clipboard button & logic by @​warrenbuckley in
umbraco/Umbraco-CMS#20757
* Member types: Implement containers by @​ronaldbarendse in
umbraco/Umbraco-CMS#20706
* Log viewer: Improves search functionality and code quality by
@​iOvergaard in umbraco/Umbraco-CMS#20913
* Log Viewer: Enhances the donut chart to be responsive, link to log
search, and show numbers directly by @​iOvergaard in
umbraco/Umbraco-CMS#20928
* Culture and Hostnames: Add ability to sort hostnames (closes #​20691)
by @​MrHutmat in umbraco/Umbraco-CMS#20826
* Localization: Adds `termOrDefault()` method to accept a fallback value
by @​iOvergaard in umbraco/Umbraco-CMS#20947
* Block Grid: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#20869
* News Dashboard: Adding functionality to overwrite the cache duration
by @​NillasKA in umbraco/Umbraco-CMS#21064
* Block List: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#21060
* Extend RTE output in Delivery API for better support for multi-site
URL resolution by @​MiguelGuedelha in
umbraco/Umbraco-CMS#20846
* Content Types: Introduce schema service to support future schema
generation by @​lauraneto in
umbraco/Umbraco-CMS#21031
* Delivery API: Adding allow list for content types by @​NillasKA in
umbraco/Umbraco-CMS#21111
* Emails: Add `Expires` header by @​rickbutterfield in
umbraco/Umbraco-CMS#20285
* Indexing: Make the indexing batch size configurable by @​kjac in
umbraco/Umbraco-CMS#20543
* Media: Add protection to restrict access to media in recycle bin
(closes #​2931) by @​AndyButland in
umbraco/Umbraco-CMS#20378
* Collection: Introduce Collection Item Card extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20954
* Collection: Introduce Collection Item Ref extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20994
 ... (truncated)

## 17.1.0-rc

## What's Changed

### 📦 Dependencies
* Dependencies: Fixed dependency conflicts when installing
Microsoft.EntityFrameworkCore.Design (closes #​20421) by @​lauraneto in
umbraco/Umbraco-CMS#20474
* Dependencies: Remove `Microsoft.CodeAnalysis.CSharp` dependency from
Umbraco.Infrastructure by @​lauraneto in
umbraco/Umbraco-CMS#20481
* build(deps): bumps @​umbraco-ui/uui from 1.16.0-rc.0 to 1.16.0 by
@​iOvergaard in umbraco/Umbraco-CMS#20535
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Client by
@​dependabot[bot] in umbraco/Umbraco-CMS#20580
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Login by
@​dependabot[bot] in umbraco/Umbraco-CMS#20621
* Bump playwright and @​playwright/test in
/tests/Umbraco.Tests.AcceptanceTest by @​dependabot[bot] in
umbraco/Umbraco-CMS#20579
* Bump the npm_and_yarn group across 2 directories with 1 update by
@​dependabot[bot] in umbraco/Umbraco-CMS#20863
* Dependencies: Updates some dependencies to latest minor or patch
releases by @​AndyButland in
umbraco/Umbraco-CMS#20953
* build(deps): bumps monaco-editor from 0.54.0 to 0.55.1 by @​iOvergaard
in umbraco/Umbraco-CMS#21054

### 🌈 Accessibility Improvements
* Entity Actions: Create button discernible text (fixes #​20205) by
@​OskarKruger in umbraco/Umbraco-CMS#20434
* Entity Actions: More create button discernible text, extension of
#​20434 by @​OskarKruger in
umbraco/Umbraco-CMS#20458
* Header: Adjusted button focus border color contrast by @​MrHutmat in
umbraco/Umbraco-CMS#20562
* Login: Added custom validation for missing password and user/email on
the login form by @​MrHutmat in
umbraco/Umbraco-CMS#20233
* Accessibility: Adding a label attribute for `<uui-button>` in news
dashboard by @​MrHutmat in
umbraco/Umbraco-CMS#20780
* Keyboard navigation: Return to opening element after modal close by
@​MrHutmat in umbraco/Umbraco-CMS#20782

### 🚀 New Features
* Preview: Allows changing the preview environment inside the preview
app, and other UX changes that enhance the experience by @​leekelleher
in umbraco/Umbraco-CMS#20598
* Login: Adds show/hide password toggle by @​MrHutmat in
umbraco/Umbraco-CMS#20611
* Adds Clear Clipboard button & logic by @​warrenbuckley in
umbraco/Umbraco-CMS#20757
* Member types: Implement containers by @​ronaldbarendse in
umbraco/Umbraco-CMS#20706
* Log viewer: Improves search functionality and code quality by
@​iOvergaard in umbraco/Umbraco-CMS#20913
* Log Viewer: Enhances the donut chart to be responsive, link to log
search, and show numbers directly by @​iOvergaard in
umbraco/Umbraco-CMS#20928
* Culture and Hostnames: Add ability to sort hostnames (closes #​20691)
by @​MrHutmat in umbraco/Umbraco-CMS#20826
* Localization: Adds `termOrDefault()` method to accept a fallback value
by @​iOvergaard in umbraco/Umbraco-CMS#20947
* Block Grid: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#20869
* News Dashboard: Adding functionality to overwrite the cache duration
by @​NillasKA in umbraco/Umbraco-CMS#21064
* Block List: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#21060
* Extend RTE output in Delivery API for better support for multi-site
URL resolution by @​MiguelGuedelha in
umbraco/Umbraco-CMS#20846
* Content Types: Introduce schema service to support future schema
generation by @​lauraneto in
umbraco/Umbraco-CMS#21031
* Delivery API: Adding allow list for content types by @​NillasKA in
umbraco/Umbraco-CMS#21111
* Emails: Add `Expires` header by @​rickbutterfield in
umbraco/Umbraco-CMS#20285
* Indexing: Make the indexing batch size configurable by @​kjac in
umbraco/Umbraco-CMS#20543
* Media: Add protection to restrict access to media in recycle bin
(closes #​2931) by @​AndyButland in
umbraco/Umbraco-CMS#20378
* Collection: Introduce Collection Item Card extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20954
* Collection: Introduce Collection Item Ref extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20994
* Collection: Introduce Card and Ref Collection View kinds by
@​madsrasmussen in umbraco/Umbraco-CMS#21037

### 🚤 Performance
* Performance: Optimize memory footprint of document URL cache (closes
#​21055) by @​AndyButland in
umbraco/Umbraco-CMS#21066
* Distributed Background Jobs: Improve distributed background job
locking behavior and performance by @​nikolajlauridsen in
umbraco/Umbraco-CMS#21100
* Repositories: Optimize repository caches to populate for both int and
GUID keys by @​AndyButland in
umbraco/Umbraco-CMS#21124
* Performance: Re-introduce lazy locks by @​lauraneto in
umbraco/Umbraco-CMS#21102

### 🐛 Bug Fixes
 ... (truncated)

Commits viewable in [compare
view](umbraco/Umbraco-CMS@release-17.0.2...release-17.1.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Umbraco.Cms.Persistence.Sqlite&package-manager=nuget&previous-version=17.0.2&new-version=17.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
alexsee added a commit to alexsee/umbraco-container that referenced this pull request Jan 18, 2026
Updated
[Umbraco.Cms.DevelopmentMode.Backoffice](https://github.com/umbraco/Umbraco-CMS)
from 17.0.2 to 17.1.0.

<details>
<summary>Release notes</summary>

_Sourced from [Umbraco.Cms.DevelopmentMode.Backoffice's
releases](https://github.com/umbraco/Umbraco-CMS/releases)._

## 17.1.0

# What's Changed Since 17.1.0-rc

### 🐛 Bug Fixes
* Media: Fix files not deleted from disk when recycle bin protection is
enabled by @​AndyButland in
umbraco/Umbraco-CMS#21309
* Document Editing: Refactor of Fix property variation change breaking
document save via Infinite Editing (closes #​21195) by @​nielslyngsoe in
umbraco/Umbraco-CMS#21293
* umbraco/Umbraco-CMS#21306 by @​calm329 in
umbraco/Umbraco-CMS#21306

**Full Changelog**:
umbraco/Umbraco-CMS@release-17.1.0-rc...release-17.1.0

## What's Changed Since the Last Release (17.0.2)

### 📦 Dependencies
* Dependencies: Fixed dependency conflicts when installing
Microsoft.EntityFrameworkCore.Design (closes #​20421) by @​lauraneto in
umbraco/Umbraco-CMS#20474
* Dependencies: Remove `Microsoft.CodeAnalysis.CSharp` dependency from
Umbraco.Infrastructure by @​lauraneto in
umbraco/Umbraco-CMS#20481
* build(deps): bumps @​umbraco-ui/uui from 1.16.0-rc.0 to 1.16.0 by
@​iOvergaard in umbraco/Umbraco-CMS#20535
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Client by
@​dependabot[bot] in umbraco/Umbraco-CMS#20580
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Login by
@​dependabot[bot] in umbraco/Umbraco-CMS#20621
* Bump playwright and @​playwright/test in
/tests/Umbraco.Tests.AcceptanceTest by @​dependabot[bot] in
umbraco/Umbraco-CMS#20579
* Bump the npm_and_yarn group across 2 directories with 1 update by
@​dependabot[bot] in umbraco/Umbraco-CMS#20863
* Dependencies: Updates some dependencies to latest minor or patch
releases by @​AndyButland in
umbraco/Umbraco-CMS#20953
* build(deps): bumps monaco-editor from 0.54.0 to 0.55.1 by @​iOvergaard
in umbraco/Umbraco-CMS#21054

### 🌈 Accessibility Improvements
* Entity Actions: Create button discernible text (fixes #​20205) by
@​OskarKruger in umbraco/Umbraco-CMS#20434
* Entity Actions: More create button discernible text, extension of
#​20434 by @​OskarKruger in
umbraco/Umbraco-CMS#20458
* Header: Adjusted button focus border color contrast by @​MrHutmat in
umbraco/Umbraco-CMS#20562
* Login: Added custom validation for missing password and user/email on
the login form by @​MrHutmat in
umbraco/Umbraco-CMS#20233
* Accessibility: Adding a label attribute for `<uui-button>` in news
dashboard by @​MrHutmat in
umbraco/Umbraco-CMS#20780
* Keyboard navigation: Return to opening element after modal close by
@​MrHutmat in umbraco/Umbraco-CMS#20782

### 🚀 New Features
* Preview: Allows changing the preview environment inside the preview
app, and other UX changes that enhance the experience by @​leekelleher
in umbraco/Umbraco-CMS#20598
* Login: Adds show/hide password toggle by @​MrHutmat in
umbraco/Umbraco-CMS#20611
* Adds Clear Clipboard button & logic by @​warrenbuckley in
umbraco/Umbraco-CMS#20757
* Member types: Implement containers by @​ronaldbarendse in
umbraco/Umbraco-CMS#20706
* Log viewer: Improves search functionality and code quality by
@​iOvergaard in umbraco/Umbraco-CMS#20913
* Log Viewer: Enhances the donut chart to be responsive, link to log
search, and show numbers directly by @​iOvergaard in
umbraco/Umbraco-CMS#20928
* Culture and Hostnames: Add ability to sort hostnames (closes #​20691)
by @​MrHutmat in umbraco/Umbraco-CMS#20826
* Localization: Adds `termOrDefault()` method to accept a fallback value
by @​iOvergaard in umbraco/Umbraco-CMS#20947
* Block Grid: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#20869
* News Dashboard: Adding functionality to overwrite the cache duration
by @​NillasKA in umbraco/Umbraco-CMS#21064
* Block List: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#21060
* Extend RTE output in Delivery API for better support for multi-site
URL resolution by @​MiguelGuedelha in
umbraco/Umbraco-CMS#20846
* Content Types: Introduce schema service to support future schema
generation by @​lauraneto in
umbraco/Umbraco-CMS#21031
* Delivery API: Adding allow list for content types by @​NillasKA in
umbraco/Umbraco-CMS#21111
* Emails: Add `Expires` header by @​rickbutterfield in
umbraco/Umbraco-CMS#20285
* Indexing: Make the indexing batch size configurable by @​kjac in
umbraco/Umbraco-CMS#20543
* Media: Add protection to restrict access to media in recycle bin
(closes #​2931) by @​AndyButland in
umbraco/Umbraco-CMS#20378
* Collection: Introduce Collection Item Card extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20954
* Collection: Introduce Collection Item Ref extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20994
 ... (truncated)

## 17.1.0-rc

## What's Changed

### 📦 Dependencies
* Dependencies: Fixed dependency conflicts when installing
Microsoft.EntityFrameworkCore.Design (closes #​20421) by @​lauraneto in
umbraco/Umbraco-CMS#20474
* Dependencies: Remove `Microsoft.CodeAnalysis.CSharp` dependency from
Umbraco.Infrastructure by @​lauraneto in
umbraco/Umbraco-CMS#20481
* build(deps): bumps @​umbraco-ui/uui from 1.16.0-rc.0 to 1.16.0 by
@​iOvergaard in umbraco/Umbraco-CMS#20535
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Client by
@​dependabot[bot] in umbraco/Umbraco-CMS#20580
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Login by
@​dependabot[bot] in umbraco/Umbraco-CMS#20621
* Bump playwright and @​playwright/test in
/tests/Umbraco.Tests.AcceptanceTest by @​dependabot[bot] in
umbraco/Umbraco-CMS#20579
* Bump the npm_and_yarn group across 2 directories with 1 update by
@​dependabot[bot] in umbraco/Umbraco-CMS#20863
* Dependencies: Updates some dependencies to latest minor or patch
releases by @​AndyButland in
umbraco/Umbraco-CMS#20953
* build(deps): bumps monaco-editor from 0.54.0 to 0.55.1 by @​iOvergaard
in umbraco/Umbraco-CMS#21054

### 🌈 Accessibility Improvements
* Entity Actions: Create button discernible text (fixes #​20205) by
@​OskarKruger in umbraco/Umbraco-CMS#20434
* Entity Actions: More create button discernible text, extension of
#​20434 by @​OskarKruger in
umbraco/Umbraco-CMS#20458
* Header: Adjusted button focus border color contrast by @​MrHutmat in
umbraco/Umbraco-CMS#20562
* Login: Added custom validation for missing password and user/email on
the login form by @​MrHutmat in
umbraco/Umbraco-CMS#20233
* Accessibility: Adding a label attribute for `<uui-button>` in news
dashboard by @​MrHutmat in
umbraco/Umbraco-CMS#20780
* Keyboard navigation: Return to opening element after modal close by
@​MrHutmat in umbraco/Umbraco-CMS#20782

### 🚀 New Features
* Preview: Allows changing the preview environment inside the preview
app, and other UX changes that enhance the experience by @​leekelleher
in umbraco/Umbraco-CMS#20598
* Login: Adds show/hide password toggle by @​MrHutmat in
umbraco/Umbraco-CMS#20611
* Adds Clear Clipboard button & logic by @​warrenbuckley in
umbraco/Umbraco-CMS#20757
* Member types: Implement containers by @​ronaldbarendse in
umbraco/Umbraco-CMS#20706
* Log viewer: Improves search functionality and code quality by
@​iOvergaard in umbraco/Umbraco-CMS#20913
* Log Viewer: Enhances the donut chart to be responsive, link to log
search, and show numbers directly by @​iOvergaard in
umbraco/Umbraco-CMS#20928
* Culture and Hostnames: Add ability to sort hostnames (closes #​20691)
by @​MrHutmat in umbraco/Umbraco-CMS#20826
* Localization: Adds `termOrDefault()` method to accept a fallback value
by @​iOvergaard in umbraco/Umbraco-CMS#20947
* Block Grid: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#20869
* News Dashboard: Adding functionality to overwrite the cache duration
by @​NillasKA in umbraco/Umbraco-CMS#21064
* Block List: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#21060
* Extend RTE output in Delivery API for better support for multi-site
URL resolution by @​MiguelGuedelha in
umbraco/Umbraco-CMS#20846
* Content Types: Introduce schema service to support future schema
generation by @​lauraneto in
umbraco/Umbraco-CMS#21031
* Delivery API: Adding allow list for content types by @​NillasKA in
umbraco/Umbraco-CMS#21111
* Emails: Add `Expires` header by @​rickbutterfield in
umbraco/Umbraco-CMS#20285
* Indexing: Make the indexing batch size configurable by @​kjac in
umbraco/Umbraco-CMS#20543
* Media: Add protection to restrict access to media in recycle bin
(closes #​2931) by @​AndyButland in
umbraco/Umbraco-CMS#20378
* Collection: Introduce Collection Item Card extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20954
* Collection: Introduce Collection Item Ref extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20994
* Collection: Introduce Card and Ref Collection View kinds by
@​madsrasmussen in umbraco/Umbraco-CMS#21037

### 🚤 Performance
* Performance: Optimize memory footprint of document URL cache (closes
#​21055) by @​AndyButland in
umbraco/Umbraco-CMS#21066
* Distributed Background Jobs: Improve distributed background job
locking behavior and performance by @​nikolajlauridsen in
umbraco/Umbraco-CMS#21100
* Repositories: Optimize repository caches to populate for both int and
GUID keys by @​AndyButland in
umbraco/Umbraco-CMS#21124
* Performance: Re-introduce lazy locks by @​lauraneto in
umbraco/Umbraco-CMS#21102

### 🐛 Bug Fixes
 ... (truncated)

Commits viewable in [compare
view](umbraco/Umbraco-CMS@release-17.0.2...release-17.1.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Umbraco.Cms.DevelopmentMode.Backoffice&package-manager=nuget&previous-version=17.0.2&new-version=17.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alexander Seeliger <alexsee@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants