我正在开发一个asp.net mvc 3 Web应用程序,我在.tt文件夹中有一个folloiwng模型类: -
public partial class Patient
{
public Patient()
{
this.Visits = new HashSet<Visit>();
}
public int PatientID { get; set; }
//code goes here...
public virtual Gender Gender { get; set; }
**public virtual ICollection<Visit> Visits { get; set; }**
然后在Controller类中我写了以下内容: -
public PartialViewResult ShowOther(int id, int skip, int take )
{
ViewBag.take = take;
Patient patient = repository.GetPatient(id);
**Visit visit = patient.Visits.OrderByDescending(d => d.Date).Skip(skip).Take(take).SingleOrDefault();**
//code goes here
所以我的问题是,如果在应用程序级别执行以下Orderby patient.Visits.OrderByDescending(d => d.Date).Skip(skip).Take(take).SingleOrDefault();
(这意味着将从数据库中重新获取所有访问对象,然后将在应用程序级别完成orderby) OR Orderby将在数据库上执行,只有预期的Visit对象将被传递给应用程序?
我的repository.GetPatient(id);
方法如下所示: -
public Patient GetPatient(int id)
{
return entities.Patients.FirstOrDefault(d => d.PatientID == id); }
BR
答案 0 :(得分:1)
在调用.ToList()
之前,.Single()
- 数据库级别。致电.ToList()
后,.Single()
- 申请级别。
在您的具体示例中,无关紧要,因为对存储库方法中的FirstOrDefault
的调用会执行查询并返回结果。
答案 1 :(得分:1)
访问patient.Visits
后,延迟加载会加载所有访问您的应用程序。一切都将在您的应用程序中完成。
如果您只想加载一次访问,请尝试以下操作:
entities.ContextOptions.LazyLoadingEnabled = false;
var patient = entities.Patients.FirstOrDefault(d => d.PatientID == id);
var visit = ((EntityCollection<Visit>)patient.Visists).CreateSourceQuery()
.OrderByDescending(d => d.Date)
.SingleOrDefault();
.