EF Caching Config (efcaching.ncconf)
The EF Caching configuration file contains information regarding the Entity Framework Provider. The efcaching.ncconf file is installed with NCache and is used for enabling NCache in Entity Framework applications.
Note
This file is located at %NCHOME%\config
in Windows or /opt/ncache/config
in Linux.
EF Caching Config Syntax
The EF Caching configuration file is explained below. These provider configuration contains cache and caching policy-related information.
<configuration>
<app-config app-id="EFCachingDemo" mode="analysis|caching">
<analysis-policy log-path="" analysis-time="1min" cache-enable-threshold="1" default-expiration-type="Sliding" default-expiration-time="180sec" dbsyncdependency="false"/>
<cache-policy-configuration database="none|sqlserver|oracle" cache-id="demoCache">
<api-level-caching expiration-type="Sliding" enable="True" expiration-time="30sec" dbsyncdependency="False" resyncProviderName="EFResyncProvider"/>
<!--sql-query = "SELECT [Extent1].[CustomerID] AS [CustomerID],= @param_0"-->
<query>
<cache-query querytext="SELECT [Extent1].[OrderID] AS [OrderID], < @param_0"/>
<cache-policy vary-by-cache-param="param_0" expiration-type="Sliding" enabled="True" expiration-time="180sec" dbsyncdependency="False" resyncProviderName="EFResyncProvider">
</query>
</cache-policy-configuration>
</app-config>
</configuration>
Understanding the EF Caching Config Tags
The following section explains the tags mentioned as part of the file syntax. To further understand EF Caching, refer to the NCache Programmer's guide.
<app-config>
The tag defines configuration settings for an application.
<configuration>
<app-config app-id = "PersonNameApp" mode = "analysis|caching">
app-id: It is an identifier for an application. The configuration can contain multiple configuration settings for different applications. This id should be the same for efcaching.ncconf as in the application, otherwise it will prompt an error.
mode: It can either be
Analysis
orCaching
(Hot Applicable). By default, its value iscaching
.analysis: This mode is used for monitoring the number of times each query executes and then it generates a report. The report contains the
Query
text and thecall count
for each query. This report can be used as a custom policy. No caching is done in this mode.caching: This mode caches the results of specified queries using either a cacheall or custom policy. On detecting updates (UPDATE, INSERT, or DELETE) in the database, it automatically evicts cached queries linked to the modified tables to ensure accuracy.
<analysis-policy>
This tag configures settings for analyzing query execution.
<analysis-policy log-path = "" analysis-time = "60" cache-enable-threshold = "5" default-expiration-type = "absolute|sliding" default-expiration-time = "180" dbsyncdependency = "true"/>
log-path: It specifies the path at which analysis log files will be generated. The default path is
<InstallDir>/log-files/efcaching-analysis-logs/
.analysis-time: The time for which the analysis will run. The default value is
60 minutes
.cache-enable-threshold: Caching will automatically be enabled for queries whose call-count exceeds this threshold. The default value is
5
.default-expiration-type: Default expiration type for analyzed queries. By default, it is absolute.
default-expiration-time: Default expiration time for analyzed queries. The default value is
180 seconds
(3 minutes).dbsyncdependency: Determine whether to enable database dependency or not. By default, it is
True
.
<cache-policy-configuration>
This tag configures cache policies by specifying the database and a unique cache-id
.
<cache-policy-configuration database = "none|oracle10i2|sqlserver" cache-id ="demoCache">
database: Database information is collected to create a database sync dependency (Hot Applicable). The default value is
none
.cache-id: Specifies a unique name of the cache. The default value is
mycache
.
<cache-policy>
For cache
policy, it caches all the queries and their results.
<cache-policy expiration-type = "absolute|sliding" enabled="True" expiration-time = "1800" dbsyncdependency ="true"/>
expiration-type: The type of expiration, can be
sliding
orabsolute
. The default value isabsolute
.enabled: Determine whether the policy is in effect or not (Hot Applicable). The default value is
True
.expiration-time: Specify the time the cache entries will expire and be removed. By default the value is
180 seconds
(3 minutes).dbsyncdependency: Determine whether to enable the database dependency or not. The default value is
True
.
<custom-policy>
For custom policy, it includes a user-configurable list of queries that should be cached with their results. When a custom policy is selected, only those query results will be cached for which the caching is enabled. You can also specify a custom caching policy for all queries.
<custom-policy>
<query query-text = "" ["SELECT FROM Products"] | stored-procedure-name = "" ] caching ="true" expiration-type = "absolute"| sliding = "" expiration-time = "180" dbsyncdependency ="true"/>
</custom-policy>
query-text: Specifies the text of the query for which the result is to be cached OR name of a stored procedure for which the output is to be cached.
stored-procedure-name: Specifies the CLR stored procedure name.
caching: Determines whether caching is enabled for this query or not. The default value is
True
.expiration-type: The type of expiration, can be absolute or sliding. The default value is
absolute
.expiration-time: Specify the time the cache entries will expire and be removed. By default the value is
180 seconds
(3 minutes).dbsyncdependency: Determine whether to enable database dependency for analyzed queries. The default value is
True
.
In the case of stored procedures, query text will be the name of a stored procedure, and there will be no default policy or database sync dependency.
You can cache stored procedure result with expiration only, no database dependency is needed here.
See Also
Client Config
Server-side Configurations
Cache Server Settings
General Cache Settings