Conventions

Conventions give you the ability to customize the Client API behavior. They are accessible from the DocumentStore object:

using (var store = new DocumentStore()
{
    Conventions =
    {
        // customizations go here
    }
}.Initialize())
{

}

You will find many settings to overwrite, allowing you to adjust the client according to your needs. The conventions apply to many different client behaviors. Some of them are grouped and described in the separate articles of this section.

Information

All customizations need to be set before DocumentStore.Initialize() is called.

MaxHttpCacheSize

If you need to modify the maximum http cache size, you can use the following setting:

MaxHttpCacheSize = new Size(256, SizeUnit.Megabytes)

Default size

The default value of this setting is configured as follows:

  • running on 64 bits:

    • if usable memory is lower than or equal to 3GB: 64MB,
    • if usable memory is greater than 3GB and lower than or equal to 6GB: 128MB,
    • if usable memory is greater than 6GB: 512MB,
  • running on 32 bits: 32MB.

The cache is created per database you use.

Disable caching

To disable the caching globally, you can set the MaxHttpCacheSize value to zero:

MaxHttpCacheSize = new Size(0, SizeUnit.Megabytes)

In this scenario, all the requests will be sent to the server to fetch the data.

MaxNumberOfRequestsPerSession

Gets or sets maximum number of GET requests per session. Default: 30.

MaxNumberOfRequestsPerSession = 10

UseOptimisticConcurrency

Controls whether optimistic concurrency is set to true by default for all future sessions. Default: false.

UseOptimisticConcurrency = true

RequestTimeout

It allows you to define the global request timeout value for all RequestExecutors created per database. Default: null.

RequestTimeout = TimeSpan.FromSeconds(90)

DisableTopologyUpdates

Forces you to disable updates of database topology. Default: false.

DisableTopologyUpdates = false

SaveEnumsAsIntegers

It determines if C# enum types should be saved as integers or strings and instructs the LINQ provider to query enums as integer values. Default: false.

SaveEnumsAsIntegers = true

UseCompression

It determines if the client will send headers to the server indicating that it allows compression to be used. Default: true.

UseCompression = true

OperationStatusFetchMode

Changes the way the operation is fetching the operation status when waiting for completion. By default, the value is set to ChangesApi which underneath is using WebSocket protocol when connection is established with the server. On some older systems e.g. Windows 7, the WebSocket protocol might not be available due to the OS and .NET Framework limitations. For that reason, the value can be changed to Polling to bypass this issue.

OperationStatusFetchMode = OperationStatusFetchMode.ChangesApi

Changing fields/properties naming convention

By default whatever casing convention you use in your entities' fields will be reflected server-side.

If following language-specific field casing conventions RavenDB clients use different field/properties naming conventions:

Language Default convention Example
C# PascalCase OrderLines
Java camelCase orderLines
JavaScript camelCase orderLines

This can be configured to allow inter-language operability e.g. store data PascalCase, but keep fields in the application code camelCase.

Using camelCase in C# client

You have to customize JsonSerializer and PropertyNameConverter.

private string FirstCharToLower(string str) => $"{Char.ToLower(str[0])}{str.Substring(1)}";

Serialization = new NewtonsoftJsonSerializationConventions
{
    CustomizeJsonSerializer = s => s.ContractResolver = new CamelCasePropertyNamesContractResolver()
},
PropertyNameConverter = mi => FirstCharToLower(mi.Name)

Changing the Identity Separator

Changes the default separator for automatically generated document IDs.
Can be any char except | (pipe).
Default: / (forward slash).

This affects these ID generation strategies:

IdentityPartsSeparator = '~'

TopologyCacheLocation

Changes the location of topology cache files. Setting this value will check directory existance and write permissions. By default it is set to the application base directory (AppContext.BaseDirectory).

TopologyCacheLocation = @"C:\RavenDB\TopologyCache"

AddIdFieldToDynamicObjects

Determines whether an Id field is automatically added to dynamic objects. Default: true.

AddIdFieldToDynamicObjects = false

ShouldIgnoreEntityChanges

This function can be configured to disable entity tracking for certain entities.
Learn more in Customize tracking in conventions.

WaitForIndexesAfterSaveChangesTimeout

Sets the default timeout for DocumentSession.Advanced.WaitForIndexesAfterSaveChanges method.

Default: 15 Seconds.

WaitForIndexesAfterSaveChangesTimeout = TimeSpan.FromSeconds(10)

WaitForReplicationAfterSaveChangesTimeout

Sets the default timeout for DocumentSession.Advanced.WaitForReplicationAfterSaveChanges method. Default: 15 Seconds.

WaitForReplicationAfterSaveChangesTimeout = TimeSpan.FromSeconds(10)

WaitForNonStaleResultsTimeout

Sets the default timeout WaitForNonStaleResults methods used when querying. Default: 15 Seconds.

WaitForNonStaleResultsTimeout = TimeSpan.FromSeconds(10)