• Webinars
  • Docs
  • Download
  • Blogs
  • Contact Us
Show / Hide Table of Contents
  • Programmer's Guide
  • Client Side API Programming
    • Setting Up Development Environment
    • Basic Cache Operations
      • Initialize Cache
      • Add Data to Cache
      • Update Data in Cache
      • Fetch Data From Cache
      • Remove Data From Cache
      • Dispose Cache
    • Bulk Operations
      • Adding Collection to Cache
      • Updating Collection in Cache
      • Retrieving Collection from Cache
      • Removing Collection from Cache
      • Deleting Collection from Cache
    • Asynchronous Operations
      • Using Asynchronous Operations
      • Using Asynchronous Operations with Callback Methods
    • Groups and Subgroups
      • Adding/Updating Data Group in Cache
      • Retrieving Data Group from Cache
      • Removing Data Group from Cache
    • Tagging Data in NCache
      • Creating Tags
      • Adding Items with Tags
      • Retrieving Previously Tagged Data
      • Removing Tagged Items from Cache
    • Named Tags
    • Data Expiration Strategies
      • Using Absolute Expiration
      • Using Sliding Expiration
    • Cache Dependencies
      • Key Dependency
      • File Dependency
      • Notification based Dependencies
        • Database Dependency using SQL Server
        • Database Dependency using Oracle
      • Polling Based Dependency
      • Custom Data Source Dependency
      • Multiple Cache Sync Dependency
      • Aggregate Dependency
      • Add Dependency to Existing Item
      • Using CLR Procedures to Call NCache
    • Locking Data in NCache
      • Locking Items in Cache (Pessimistic Locking)
      • Locking Items with Cache Item Versioning (Optimistic Locking)
    • SQL Reference for NCache
      • SQL Syntax
      • Querying Samples for Operators
      • Querying Data in NCache
      • NCache Language Integrated Query (LINQ)
        • Using LINQ in NCache
        • Configuring LINQPad for NCache
        • Querying NCache Data in LINQPad
    • Event Notifications
      • Cache Level Event Notifications
      • Item Level Event Notifications
      • Custom Event Notifications
    • Publish/Subscribe (Pub/Sub) in NCache
      • Pub/Sub Topics
      • Managing Topics
      • Pub/Sub Messages
        • Message Behavior and Properties
        • Creating a Message
      • Publish Messages to Topic
      • Subscribe for Topic Messages
      • Monitoring Pub/Sub Topics
    • Continuous Query
    • Using Streams in NCache
      • Opening with Stream Modes
      • Adding and Updating Data with Streams
      • Retrieving Data from Streams
      • Closing a Stream
    • Security and Encryption
      • NCache Security
      • NCache Data Encryption
    • Data Compression
    • NCache Management API
  • Server Side API Programming
    • Cache Startup Loader
      • Components of Cache Startup Loader
      • Sample Implementation of ICacheLoader on Single Node
      • Sample Implementation of ICacheLoader with Distribution Hints
    • Data Source Providers (Backing Source)
      • Read-Through Caching
        • Configure Read-Through Provider
        • Using Read-Through with Cache Operations
      • Write-Through Caching
        • Configuring Write-Through Provider
        • Using Write-Through with Basic Operations
        • Using Write-Behind with Basic Operations
        • Using Write-Behind with Bulk Operations
        • Using Write-Behind with Async Operations
        • Monitor Write-Through Counters
    • Custom Dependency
      • Sample Implementation of Custom Dependency
      • Sample Usage of Custom Dependency
    • WAN Replication through Bridge
      • Bridge Configurations
      • Implementing Bridge Conflict Resolver
    • Entry Processor
      • Sample Implementation of IEntryProcessor Interface
      • Sample Usage of EntryProcessor
    • MapReduce
      • Sample Implementation of MapReduce Interfaces
      • Sample Usage of MapReduce
    • Aggregator
      • Sample Implementation of IValueExtractor Interface
      • Sample Implementation of IAggregator Interface
      • Sample Usage of Aggregator
    • Dynamic Compact Serialization
  • Client Side ASP.NET Features
    • ASP.NET
      • ASP.NET Session State Provider for NCache
      • Multi-Region ASP.NET Session State Provider for NCache
    • ASP.NET Core
      • Session Storage in ASP.NET Core
        • Configure NCache ASP.NET Core Session Provider
        • Configure ASP.NET Core Sessions with NCache IDistributedCache Provider
      • Multi-Region ASP.NET Core Session Provider for NCache
      • Object Caching in ASP.NET Core
    • ASP.NET SignalR
      • Using NCache Extension for SignalR
    • View State Caching
      • Configuring and Using Content Optimization
      • Group View State with Sessions
      • Limit View State Caching
      • Perform Page Level Grouping for View State
    • ASP.NET Output Cache
      • Configure ASP.NET Output Caching
      • Using ASP.NET Output Cache with Custom Hooks
  • Client Side Third Party Integrations
    • Migrating AppFabric to NCache
      • AppFabric API vs. NCache API
    • NHibernate
      • NCache as NHibernate Second Level Cache
      • Using NHibernate Query Caching
      • Configuring Database Synchronization with NHibernate
    • Entity Framework Caching Integration
      • NCache as Entity Framework Second Level Cache
      • Entity Framework Caching Config File
    • Entity Framework Core Caching
      • Installing NCache Entity Framework Core Provider
      • Configuring NCache Entity Framework Core Provider
      • Using NCache Entity Framework Core Provider
        • Caching Options for EF Core Provider
        • LINQ APIs for EF Core Provider
        • Cache Only APIs for EF Core Provider
        • Query Deferred APIs for EF Core Provider
      • Logging in NCache Entity Framework Core Provider
    • Memcached
      • NCache Memcached Gateway Approach
      • Memcached Client Plugin for .NET
    • Debug NCache Providers in Visual Studio
    • NCache for Visual Studio Extension

Configuring NCache Entity Framework Core Provider

This section focuses on configuration required to use NCache as second level cache in an Entity Framework application.

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 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 CacheInitParams 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.

    Default Schema Configuration for SQL Dependency

    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.

    Examples

    • The following code sample configures NCache for the EF application in an extended DbContext class with SQL Server DependencyType and DbContext instance. 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 DbContext instance
            NCacheConfiguration.Configure(cacheId, DependencyType.SqlServer);
    
            optionsBuilder.UseSqlServer(connString);
    
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
             modelBuilder.HasDefaultSchema("dbo"); //added this line for SQL dependency
             //rest of the entity model code goes here
        }
    }
    


    • 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:
    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
    
            CacheInitParams initParams = new CacheInitParams();
            initParams.RetryInterval = 3;
            initParams.ConnectionRetries = 2;
            initParams.Port = 7801;
    
            NCacheConfiguration.Configure(cacheId, DependencyType.SQLServer, initParams);
    
            optionsBuilder.UseSqlServer(connString);
        }
    }
    
    Back to top Copyright © 2017 Alachisoft