私はリボンとContentControlを保持するMainWindowを持つシンプルなC#MVVM WPFアプリケーションを用意しています。リボンアクションに基づいて、私は異なるUserControlsに切り替えてContentControlに表示します。 Entity Framework 6繰り返しの読み込みを避ける
はViewModelに内部のデータをロードするには、私は基本的にこれを行う:今Load
メソッドが毎回呼ばれ
public class ProductsViewModel : BaseViewModel
{
public CollectionViewSource ProductsCollection { get; private set; }
private MyDataContext _ctx;
public ProductsViewModel()
{
ProductsCollection = new CollectionViewSource();
_ctx = new MyDataContext();
Load()
}
public void Load()
{
_ctx.Products.Load();
ProductsCollection.Source = _ctx.Products.Local;
}
}
iはDataContextのように、このビューモデルとユーザーコントロールを示しています。
これを避ける方法はありますか? _ctx.Products.Load()
が(11Kレコードの)重大な時間を要し、ObservableCollectionに_ctx.Products.Local
でアクセスするのは非常に遅いためです。
すべてのUserControlのDataContextと、データベースとの同期でUIを維持するのが簡単なので、.Local
Collectionの作業が好きです。しかし、より良いアプローチがある場合は、私に知らせてください。
私はEFとMVVM/WPFで非常に新しいので、すべての助けが大変ありがとうございます!
P.S:あなたは、これは「簡単なのデスクトップアプリケーションで述べたので、私は、SQL Serverの2014
最初の質問です:なぜすべてのレコードを読み込みますか?私は、ユーザーがレコードを編集することができ、データグリッドを、持っている、と私の知る限り、WPFのDataGridでページングを実装するための簡単な解決策は、少なくとも存在しないため –
は... – CeOnSql
は、パフォーマンスを向上させるには、いくつかの方法がありますが、それは、アプリケーションのロジックに依存します。あなたのデータ検索にいくつかのフィルタを追加することができます。また、(それ静的/シングルトンのいくつかの種類作り、例えば代わりに、ユーザーコントロールのページのルートに)高いレベルでのデータ検索を置くことができます。ちょっと別の詳細:DbContext Setインスタンスで.Load()メソッドを呼び出す必要はないと思います。また、Entity Frameworkの設定(遅延ロードなど) – hbulens