HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket

Database mode

Describes database mode configuration.

The database mode configuration has ReadWrite and ReadOnly options.

ReadWrite mode

The ReadWrite mode is the default mode, and the application works normally.

ReadOnly mode

In the ReadOnly mode, the application can only load data from the database. The saving and updating operations by EPiServer.Data.IDatabaseHandler throw exceptions, which is why some modules are disabled or work differently. The following modules and functions are affected in the ReadOnly mode:

  • Scheduler Service is disabled.
  • Model synch is disabled.
  • Indexing of content is disabled.
  • User, role, and claims synch are disabled.
  • Automatic database updating throws an exception if updating is needed.
  • The Statistics Logger is disabled.
  • Saving web.config file into database is disabled.


You can configure the database mode by the databaseMode attribute on the episerver.dataStore section or by the episerver:DatabaseMode setting under the appSettings section.

Example of setting ReadOnly mode by appsetting.json section:

  "EpiServer": {
    "Cms": {
      "DataAccess": {
        "DatabaseMode": "ReadOnly"
<button class="button-toggle c-info-block__expand-button" 
        title="Code example CMS 10-11" 
        aria-expanded="false">Code example CMS 10-11</button>

Example of setting the ReadOnly mode by episerver.dataStore section:

<episerver.dataStore databaseMode="ReadOnly"></episerver.dataStore>

Example of setting ReadOnly mode by appsetting section:

  <add key="episerver:DatabaseMode" value="ReadOnly" />

Find Database mode by code

Use the IDatabaseMode to find and detect the database mode by code:


Access Protected Module in the ReadOnly mode

By default, HttpException returns status code 503 when accessing a protected module in the ReadOnly mode. You can override this behavior by monitoring the AccessPath event.

ServiceLocator.Current.GetInstance<IAccessReadOnlyProtectedModules>().AccessPath += (object sender, ReadOnlyProtectedModuleEventArgs e) =>
  { e.Handled = true; // Put your code here redirect to a custom readonly page… }