配置 EF Core 缓存
本节重点介绍使用 NCache 实体框架应用程序中的扩展方法并创建 EF Core 缓存。这需要序列化实体并指定 NCache- 中的特定配置 DbContext
您的 EF 应用程序。
备注
此功能也可用于 NCache Professional.
NCache 如果项目因过期或驱逐而失效,用户还可以灵活地同步缓存。 这可以使缓存中的数据保持新鲜,并减少为获取过期项目而到数据库进行的网络访问。
序列化 EFCore 缓存中的实体
在配置 EF Core Cache 之前,任何数据库模型中的所有实体都需要序列化以存储在 NCache因此,它们必须被标记为可序列化。
[Serializable]
public partial class Customers
{
// Getters setters
}
在 DbContext 中指定缓存配置
要配置 EF Core 缓存, NCache 提供在中指定的可配置缓存属性 DbContext
。 该 NCacheConfiguration
类允许用户指定属性并为您的应用程序配置记录器:
重要
您必须配置 NCache ,在 DbContext
或者作为应用程序的入口点,否则,它将抛出异常,指出 NCache 未提供初始化配置。
- 以下代码示例配置 NCache 对于扩展中的 EF 应用程序
DbContext
上课SqlServer
,DependencyType
及CacheConnectionOptions
指定缓存的集群端口、重试间隔和连接重试次数。 配置CacheId
和ConnString
中已指定 应用配置 文件:
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"];
bool errorEnabled = ConfigurationManager.AppSettings["ErrorEnabled"];
int bulkInsertChunkSize = ConfigurationManager.AppSettings["BulkInsertChunkSize"];
// Configure cache with connection retries and security
var options = new CacheConnectionOptions();
options.RetryInterval = 3;
options.ConnectionRetries = 2;
options.Port = 7801;
// Configure cache with security
options.UserCredentials.UserID = "john_smith";
options.UserCredentials.Password = "12345";
NCacheConfiguration.Configure(cacheId, DependencyType.SQLServer, errorEnabled, bulkInsertChunkSize, options);
optionsBuilder.UseSqlServer(connString);
}
}
SQL 依赖项的默认架构配置
数据库依赖关系查询与常规 SQL 查询略有不同。 因此,SQL Server 不接受这些有效的查询。 为了避免这个问题, dbo
需要附加在默认模式设置为的表名之前 dbo
。 这可以通过在 OnModelCreating
中的方法 DbContext
类:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("dbo"); // add this line for SQL dependency
// rest of the entity model code goes here
}
此生成的查询可用于配置数据库依赖性。
配置选项
提供的配置选项 NCacheConfiguration
是:
委员 | Type | 课程描述 |
---|---|---|
CacheId |
string |
指定用于在实体框架应用程序中提供服务的缓存的名称。 如果未指定缓存名称,则会引发配置异常。 |
DatabaseType |
DependencyType |
用于通知缓存有关实体框架正在使用的数据库的枚举。 这些值为:Other = 0SqlServer = 1Oracle = 2这个枚举处理数据失效。 如果数据库中的数据更新, NCache 根据受影响的实体删除缓存的查询,以便在下一个查询时可以从数据源提供新数据,以防止使用过时的数据。 注意:Entity Framework Core 不支持 Oracle,因此应该避免使用。 注意: 如果是 DependencyType 设置 Other ,未创建数据库依赖项。注意: 如果是 DependencyType 设置 SqlServer ,必须在 SQL 服务器上启用 SQL 服务代理,因为数据失效需要 SQL 依赖项。 SQL 依赖项还需要特殊配置更改为 DbContext . |
InitParams |
CacheConnectionOptions |
一个类包含 定制参数 使用用户指定的配置初始化缓存。 |
IsConfigured |
bool |
指定是否 DbContext 是否配置了任何覆盖选项。 |
付款方式 | 课程描述 |
---|---|
Configure |
配置用于在实体框架应用程序中提供服务的缓存。 这根据用户指定的属性设置缓存的配置。 它接受缓存 ID、数据库依赖类型以及缓存的任何可选初始化参数。 |
ConfigureLogger |
配置实例 Microsoft.Extensions.Logging.ILogger 生活 Microsoft.Extensions.Logging.ILoggerFactory 记录来自缓存提供程序的操作详细信息。 |
IsLoggerEnabled |
指定是否已在指定的日志级别启用记录器。 |
errorEnabled |
允许用户确定是否要抛出异常 FromCache 和 LoadIntoCache 查询。 |
bulkInsertChunkSize |
这会将大量实体划分为较小的块,并逐块更新缓存。 默认情况下, bulkInsertChunkSize 是1000。 |
参见
.NET: Alachisoft.NCache.EntityFrameworkCore 和 Alachisoft.NCache.运行时.缓存 命名空间。