在C#Web方法中,可以存储通过实体框架检索到的数据以供后续调用
本文关键字:检索 数据 调用 框架 方法 C#Web 存储 实体 | 更新日期: 2023-09-27 17:59:25
我有一个web方法,可以通过EF6访问数据库中的大约8个表。每当用户更改表单上的选项时,都会调用web方法,以便表单的其他输入反映基于当前选择的可能内容。
表本身很少会改变,但是web方法可能会被每个用户点击10-12次。
我的网络方法的简化版本是:
[WebMethod]
public string GetProducts() {
string output = "";
using (var context = new MyEntity.MyEntities())
{
foreach (MyEntity.MyProduct p in context.MyProducts)
{
/// Perform some logic here to decide if we want the product
output += p.MyProductName + "_";
}
}
if (output != "")
output = output.Substring(0, output.Length - 1);
return output;
}
在这个简化的例子中,是否可以以asmx可以用于后续调用的方式缓存products表一次,然后只使用它,而不是不断地访问数据库?
您可以使用WebMethodAttribute.CacheDuration来缓存web方法的结果。
当启用缓存时,请求和响应保存在上的内存中服务器的缓存持续时间至少为缓存持续时间,因此如果您期望请求或响应非常大,或者您期望要求差异很大。
[WebMethod(CacheDuration = 180)]
public string GetProducts() {
有两个问题可能会影响ASP.NET 2.0 Web服务应用程序中的输出缓存。
- 在ASP.NET 2.0中,测试页的HTTP方法已从GET更改为POST。但是,POST通常不会被缓存。如果将ASP.NET 2.0 Web服务应用程序中的测试页更改为使用GET,则缓存工作正常
- 此外,HTTP表示用户代理(浏览器或调用应用程序)应该能够通过将"缓存控制"设置为"无缓存"来覆盖服务器缓存。因此,ASP.NET应用程序在发现"无缓存"标头时会忽略缓存的结果