0

Entity Framework 4 と Self Tracking Entities を使用しています。スキーマは次のようになります。

患者 -> 検査 -> LeftPictures -> RightPictures

したがって、これら 2 つの関係の TrackableCollection があります。患者 1 - * ....写真。顧客フォームをロードして詳細を閲覧するとき、これらのデータ画像をロードする必要はありません。検査の詳細のために別のフォームがロードされた場合にのみです!

クラス ライブラリをデータ リポジトリとして使用して、データベース (SQL Server) とこのコードからデータを取得しています。

public List<Patient> GetAllPatients()
{
    try
    {
        using (OptoEntities db = new OptoEntities())
        {
            List<Patient> list = db.Patients
                .Include("Addresses")
                .Include("PhoneNumbers")
                .Include("Examinations").ToList();

            list.ForEach(p =>
                             {
                                 p.ChangeTracker.ChangeTrackingEnabled = true;

                                 if (!p.Addresses.IsNull() &&
                                     p.Addresses.Count > 0)
                                     p.Addresses.ForEach(a => a.ChangeTracker.ChangeTrackingEnabled = true);

                                 if (!p.PhoneNumbers.IsNull() &&
                                     p.PhoneNumbers.Count > 0)
                                     p.PhoneNumbers.ForEach(a => a.ChangeTracker.ChangeTrackingEnabled = true);

                                 if (!p.Examinations.IsNull() &&
                                     p.Examinations.Count > 0)
                                     p.Examinations.ForEach(e =>
                                                                {
                                                                    e.ChangeTracker.ChangeTrackingEnabled = true;

                                                                });
                             });

            return list;
        }
    }
    catch (Exception ex)
    {
        return new List<Patient>();
    }
}

ここで、検査の詳細フォームを呼び出すときに、検査関係 (LeftEyePictures、RightEyePictures) のすべての画像を取得する必要があります。それは遅延読み込みと呼ばれていると思いますが、エンティティ接続をすぐに閉じている間にそれを実現する方法がわかりません。このままでいたいです。

アプリケーションを通じて BindingSource コンポーネントを使用します。

望ましい結果を得るための最良の方法は何ですか?

ありがとうございました。

4

1 に答える 1

0

セルフ トラッキング エンティティは、遅延読み込みをサポートしていません。さらに、遅延読み込みは、エンティティがライブ コンテキストに関連付けられている場合にのみ機能します。コンテキストをすぐに閉じたり破棄したりする必要はありません。WinForms アプリケーション コンテキストの場合、通常はより長い時間存続します (フォームごとに 1 つのコンテキスト、またはプレゼンター アプローチごとに 1 つのコンテキストに従うことができます)。

WinForms アプリケーションは、遅延読み込みや変更追跡などのすべての機能がすぐに使用できる通常の添付エンティティのシナリオです。STE は、エンティティをシリアル化し、別のアプリケーションに (Web サービス呼び出しを介して) 渡す必要がある分散システムで使用されることになっています。

于 2011-08-17T19:09:58.477 に答える