• Webinars
  • Docs
  • Download
  • Blogs
  • Contact Us
Show / Hide Table of Contents

Configure EF Core with NCache as Second Level Cache

Note

This feature is available in NCache Enterprise and Professional editions.

This section focuses on configuration required to use NCache as second level cache in an Entity Framework application. This requires serializing entities and specifying NCache specific configurations in DbContext of your EF applications.

NCache also provides the flexibility to resync cache if items are invalidated due to expiration or eviction. This keeps the data afresh in the cache, and reduces network trips to the database to fetch the expired items.

Serializing Entities

All entities of the database model need to be serialized in order to be stored in NCache, therefore they have to be marked as serializable.

[Serializable]
public partial class Customers
{
     // Getters setters
}

Specifying Cache Configurations in DbContext

To configure NCache in Entity Framework applications, NCache provides configurable cache properties which are specified in the DbContext. The NCacheConfiguration class allows specifying the properties and configuring the logger for your application:

Important

It is advised to configure NCache in either the database context or the entry point of the application, else an exception is thrown, prompting that NCache initialization configuration has not been provided.

  • The following code sample configures NCache for the EF application in an extended DbContext class with SqlServer DependencyType and CacheInitParams specifying Cluster Port, Retry Interval and Connection Retries for the cache. The configurations CacheId and ConnString have been specified in App.config:
public partial class NorthwindContext : DbContext
{
...
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // Parameters specified in App.config
        string cacheId = ConfigurationManager.AppSettings["CacheId"];
        string connString = ConfigurationManager.AppSettings["ConnString"];

        // configure cache with SQLServer DependencyType and CacheInitParams
        var options = new CacheConnectionOptions();
        options.RetryInterval = 3;
        options.ConnectionRetries = 2;
        options.Port = 7801;

        NCacheConfiguration.Configure(cacheId, DependencyType.SQLServer, options);

        optionsBuilder.UseSqlServer(connString);
    }
}

Default Schema Configuration for SQL Dependency

Note

This feature is available in NCache Enterprise edition.

Database dependency queries differ slightly from regular SQL queries. Hence SQL Server does not accept the query specified as valid. To avoid this issue, dbo needs to be appended before the table name where default schema is set as dbo. This can be done by adding the following line of code in the OnModelCreating method in DbContext class:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
     modelBuilder.HasDefaultSchema("dbo"); //add this line for SQL dependency

     //rest of the entity model code goes here
}

The query now generated can be used to configure database dependency.

Configuration Options

The configuration options provided by NCacheConfiguration are:

Member Type Description
CacheId string Specifies the name of the cache to be used for serving in the Entity Framework application. If no cache name is specified, a configuration exception will be thrown.
DatabaseType DependencyType Enum to inform the cache about the database being used by Entity Framework. The values are:
  • Other = 0
  • SqlServer = 1
  • Oracle = 2
    This enum deals with data invalidation. If data is updated in the database, NCache removes the cached queries based on the affected entities so that new data can be served from the data source on the next query to prevent usage of stale data.
    NOTE: Entity Framework Core does not yet provide support for Oracle, so it should be avoided.
    NOTE: In case of DependencyType set as Other, database dependency is not created.
    NOTE: In case of DependencyType set as SqlServer, SQL service broker must be enabled on SQL server as data invalidation requires SQL dependency. SQL dependency also requires special configuration change to DbContext. See below for detail.
  • InitParams CacheConnectionOptions Class that contains customized parameters to initialize cache with user specified configurations.
    IsConfigured bool Specifies whether DbContext has been configured with any overriding options or not.
    Method Description
    Configure Configures the cache to be used for serving in the Entity Framework application. This sets the configuration of the cache according to the user specified properties. It takes in the cache ID, database dependency type and any optional initialization parameters for the cache.
    ConfigureLogger Configures instance(s) of Microsoft.Extensions.Logging.ILogger via an Microsoft.Extensions.Logging.ILoggerFactory in order to log details of operations from the caching provider.
    IsLoggerEnabled Specifies whether the logger has been enabled at the specified log level or not.

    See Also

    Installing Entity Framework Core Caching Provider
    Using NCache Entity Framework Core Caching Provider
    Logging Entity Framework Core Caching Provider
    Memcached Wrapper and Gateway Support for NCache

    Back to top Copyright © 2017 Alachisoft