Entity Framework 是一个久经考验的 Microsoft .NET 对象关系映射框架。它使您能够通过域对象处理关系数据。此外,它还免除了您原本需要编写的大部分数据库持久化代码。
实体框架 (Entity Framework) 用于高事务性应用程序,这些应用程序对性能和可扩展性至关重要。但是,在大多数此类应用程序中,数据库很快就会成为瓶颈。因为与应用程序层不同,在应用程序层可以根据需要添加更多应用服务器来扩展,但数据库层却无法做到这一点。
实现这种可扩展性的唯一方法是使用分布式缓存,例如 NCache它是一个面向 .NET 应用程序的极速且可扩展的分布式缓存。它允许您缓存应用程序数据,减少昂贵的数据库访问,并提高应用程序的性能和可扩展性。
Entity Framework 二级缓存(L2 缓存)是一种缓存模式,可在不同的数据库上下文和用户会话之间保留数据。虽然 Entity Framework 6.x(经典版)本身并不提供此功能, NCache 它以自定义 ADO.NET 提供程序的形式插入。这允许您将查询卸载到分布式集群,从而确保线性可扩展性和 100% 的正常运行时间,而无需更改您的代码。
如果您的 Entity Framework 应用程序在多服务器环境中运行,则需要一个分布式缓存作为 Entity Framework 二级缓存。并且, NCache 是多服务器配置的理想选择,您应该使用它,原因如下:
关于使用的最好的事情 NCache 使用 Entity Framework 的好处在于,您无需进行任何编程。您只需修改应用程序的配置文件,在 部分并覆盖 invariantName 和 type 配置。以下是示例 应用程序配置文件 的变化:
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
<interceptors>
<interceptor type="Alachisoft.NCache.Integrations.EntityFramework.Caching.EFCommandInterceptor, Alachisoft.Integrations.EntityFramework.CachingProvider"/>
</interceptors>
</entityFramework>
此 NCache Entity Framework 二级缓存提供程序作为自定义 ADO.NET 提供程序插入。此提供程序允许您在分析模式下运行,并将应用程序发出的所有不同查询记录到 Entity Framework。这些查询将记录在一个文件中,并记录此查询在此分析模式下被调用的次数。以下是示例:
<analysis-report>
<query>
<!--Call count = 12-->
<cache-query query-text="SELECT [Extent1].[ProductID] AS [ProductID],
[Extent1].[ProductName] AS [ProductName],
[Extent1].[SupplierID] AS [SupplierID],
[Extent1].[CategoryID] AS [CategoryID],
[Extent1].[QuantityPerUnit] AS [QuantityPerUnit],
[Extent1].[UnitPrice] AS [UnitPrice],
[Extent1].[UnitsInStock] AS [UnitsInStock],
[Extent1].[UnitsOnOrder] AS [UnitsOnOrder],
[Extent1].[ReorderLevel] AS [ReorderLevel],
[Extent1].[Discontinued] AS [Discontinued] FROM
[dbo].[Products] AS [Extent1]
WHERE 5 = [Extent1].[ProductID]"/>
<cache-policy vary-by-cache-param=""
expiration-type="Absolute"
enabled="True"
expiration-time="30sec"
dbsyncdependency="False"
resyncProviderName="EFResync"/>
</query>
</analysis-report>
这使您可以确定要缓存哪些查询以及缓存多长时间。 您还可以为部分或全部查询指定数据库同步。
通过插入 NCache Entity Framework 二级缓存提供程序,通过修改 app.config,您将为您的应用程序获得企业级分布式缓存。以下是一些功能 NCache 提供实体框架应用程序。
虽然,使用 NCache 由于 Entity Framework 二级缓存非常快捷和简单,它只为您提供了一组有限的 NCache 特征。这样做的原因是 NCache 受限于它作为自定义 ADO.NET 提供程序插入的事实,并且必须在 SQL 查询级别进行处理。有许多 NCache 如果您决定将其用作实体框架二级缓存提供程序,则无法使用的功能。
您的替代方法是使用 NCache 直接从实体框架应用程序中进行 NCache API 像所有其他非实体框架 .NET 应用程序一样进行调用。虽然采用这种方式需要进行少量编程工作,但您可能会发现其好处大于额外的编程工作。
以下是如果您将其用作实体框架二级缓存与使用它时您会错过的功能列表 NCache 直接从您的应用程序。
| 功能类别 | 特性 | EF 缓存提供程序(无需代码) | NCache 直接 API |
|---|---|---|---|
| 进阶运作 | 批量操作 | 不提供 | 可提供 |
| 分组与搜索 | 标签 和 命名标签 | 不提供 | 可提供 |
| 查询 | SQL 以及 LINQ 搜索 | 不提供 | 可提供 |
| 并发 | 锁定 以及解锁物品 | 不提供 | 可提供 |
| 诚信 | 缓存项版本控制 | 不提供 | 可提供 |
| 数据源 | 通读 / 直写 / 后写 | 不提供 | 可提供 |
| 活动通知 (项目、通用、自定义) | 不提供 | 可提供 | |
| 维护 | 缓存加载器和刷新器 | 不提供 | 可提供 |