1

リレーションはおそらく間違った言葉ですが、データ テーブルは私が以前に使用した言葉です。SQL データベースから EF4 をプルしています。顧客、会社、部門などのテーブル。通常、選択のためにコンボボックスに入るもの。私はそれらを静的リストに保持しています(アプリの起動時にのみ入力する必要があります)。いくつかのコンボボックスのアイテムソースがそれらにバインドされています。これにより、ViewModel から選択したアイテムをバインドすることで、特定の選択を簡単に「関連付ける」ことができます。

私の問題は、いくつかの場所で、表示専用のデータグリッド内の ID に関連付けられた名前が必要なだけです。CompanyName である必要がある CompanyId を含む数百行。ここでのパフォーマンスが気になります。ルックアップ中に DB FK を使用して名前を取得することもできますが、それらはすべて静的リストにあるため、無駄に思えます。また、遅延読み込みがデータ バインディング中または最初のクエリ中に検索されることを意味するかどうかもわかりません。

ここでの最善の解決策は何ですか? 静的リストを使用して wpf 値コンバーターを作成できますか? データを取得した後、データに対して foreach を実行し、静的リストの値を調べて、名前をオブジェクトに格納する必要がありますか?

4

2 に答える 2

1

このロジックをクエリに組み込むことができます。

var viewModels = (from c in objectContext.Customers
                 select new MyGridViewModel {
                       CustomerId = c.CustomerId,
                       CompanyId = c.CompanyId,
                       CompanyName = c.Company.Name
                 }).ToList();

これにより、すべての列をフェッチする必要がなくなります (CustomerId、CompanyId、および Company Name のみが返されます。また、顧客の Company を遅延ロードすることもありません。

次に、View Models をグリッドに簡単にバインドできます。

myGrid.ItemsSource = viewModels;
于 2011-08-12T21:57:49.447 に答える
0

ComboBox に必要な静的データを各 ViewModel のコンストラクターに挿入することはできませんか?

たとえば、コンストラクターで を渡しList<Customer> customersたり、エンティティ オブジェクトの使用を避けたい場合は、List<CustomerViewModel> customerViewModelsコンボ ボックスに入力するために必要な列のみを含む を渡すことができます。

依存性注入フレームワークを使用している場合、これは特に簡単ですが、そうでない場合でも、それほど悪くはなく、良い習慣です。

于 2011-08-12T22:14:03.537 に答える