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; }**

次に、コントローラークラスで次のように書きました:-

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

したがって、次の Orderbypatient.Visits.OrderByDescending(d => d.Date).Skip(skip).Take(take).SingleOrDefault();がアプリケーション レベルで実行されるか (つまり、すべての訪問オブジェクトがデータベースから取得され、次に orderby がアプリケーション レベルで実行されることを意味します) 、またはOrderby がデータベースで実行され、意図した Visit オブジェクトだけがアプリケーションに渡されますか?

私のrepository.GetPatient(id);方法は次のようになります:-

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

ブラジル

4

2 に答える 2

1

patient.Visits遅延読み込みにアクセスすると、アプリケーションへのすべての訪問が読み込まれます。すべてはアプリケーションで行われます。

1回の訪問のみをロードする場合は、次のことを試してください。

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 に答える
1

を呼び出す前.ToList()に、.Single()- データベース レベル。を呼び出した後.ToList().Single()- アプリケーション レベル。


FirstOrDefaultあなたの特定の例では、リポジトリメソッドでの呼び出しがクエリを実行して結果を返すため、問題ではありません。

于 2012-06-05T17:00:45.397 に答える