c# - 缓存一些数据 EF
问题描述
我有一个 DbContext 和许多实体。我想缓存其中的一个实体。即我有一个实体Address
:
public partial class Address : BaseEntity
{
public string Street { get; set; }
public string City { get; set; }
public string ZipPostalCode { get; set; }
public int StateProvinceId { get; set; }
public string ContactName { get; set; }
public string ContactPhone { get; set; }
public string ContactFaxNumber { get; set; }
public string ContactEmail { get; set; }
public virtual StateProvince StateProvince { get; set; }
}
和StateProvince
:
public partial class StateProvince : BaseEntity
{
public string Name { get; set; }
public string Abbreviation { get; set; }
public int TruckSpeedLimit { get; set; }
}
当我通过 ID 获取地址时,例如:
var address = _db.Addresses.Where(p=>p.Id == id).FirstOrDefault();
然后尝试获取州名:
var state = address.StateProvince.Name;
它向数据库创建了另一个请求。如果我有一个地址列表,它会创建列表元素附加请求的计数
当然,我可以创建 DTO 类并在 Linq 查询中进行投影,例如:
var address = _db.Addresses.Where(p=>p.Id == id).Select(p=> new AddressDTO{ Id = p.Id, ..., StateName = p.StateProvince.Name..}).FirstOrDefault();
但是我的代码架构师根本不喜欢 DTO 类,我也不想为简单实体做重复的类。
状态列表是静态的。我怎么能对 EF 说:“请缓存状态!” 并避免对数据库的额外请求?
解决方案
这最好在 EF 之外完成。只需将静态变量分配给该值
db.States.AsNoTracking().ToList()
EF 中没有任何机制可以强制它从不刷新实体。
推荐阅读
- javascript - HTML 上的 Javascript 输入和输出
- php - 如何分组 GROUP_CONCAT()?
- php - 使用 Xpath 表达式并检查元素的计数
- java - 跨度未发送到 zipkin
- html - HTML href - 悬停不系统
- c# - 如何提高使用 C# 从数据库加载产品列表的进程的性能?
- apache-spark - 在数据框中创建假异常 - pyspark
- python - 无法解决 python numpy zeros 中的内存错误
- android - 如何在播放时下载视频,使用 ExoPlayer?
- python - 安装 OpenVino 生成与张量流相关的错误