1

我正在开发一个 asp.net mvc 3 Web 应用程序,并且我的 .tt 文件夹中有以下模型类:-

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)或者Orderby 将在数据库上执行并且只有预期的访问对象将被传递给应用程序?

我的repository.GetPatient(id);方法如下:-

 public Patient GetPatient(int id)
        {
            return entities.Patients.FirstOrDefault(d => d.PatientID == id);        }

BR

4

2 回答 2

1

在调用之前.ToList().Single()- 数据库级别。调用后.ToList().Single()- 应用程序级别。


FirstOrDefault在您的具体示例中,调用存储库方法执行查询并返回结果并不重要。

于 2012-06-05T17:00:45.397 回答
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();
                                                      .
于 2012-06-05T17:03:44.353 回答