我有一个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();
然后尝试获取State name:
var state = address.StateProvince.Name;
它会向DB再创建一个请求。如果我有一个地址列表,它会创建count of list element的额外请求
当然,我可以在Linq查询中创建DTO类并进行投影,如下所示:
var address = _db.Addresses.Where(p=>p.Id == id).Select(p=> new AddressDTO{ Id = p.Id, ..., StateName = p.StateProvince.Name..}).FirstOrDefault();
但是我的代码架构师根本不喜欢DTO类,我也不想为简单的实体创建重复的类。
状态列表是静态的。我怎么对EF说:“请给我缓存状态!”并避免对db的额外请求?
https://stackoverflow.com/questions/52037882
复制相似问题