2

私のデータベースは〜10000行を組み合わせた5つのテーブルで構成されています。共有フォルダにあるSQL Server CEでは約1Mbがかかります。データベース自体は階層的な国 - 地域 - 都市 - 街路 - 建物です。 Entity Framework 4を使用しています。EFを使用してデータベース全体を読み込む方法

データベースは小規模なので、WPF ListViewで2000のすべての都市を探索および編集することができます。しかし、私が今まで試したすべてのアプローチでは、GUIは低速です(多くのデータベースのラウンドトリップのために、ダミーのデータGUIは耐光性があります)。 1回または数回のデータベース往復でデータベース全体をメモリにロードするにはどうすればよいですか?

は私が複数の Include()を試してみましたが、私は素晴らしいパフォーマンスペナルティ as described here万一のI write my own ORM-光

を指摘しましたか?私はまた、データベースの代わりにプレーン・アスキーCSVファイルを使用することもできますが、明らかに並行性は除外されます。

答えて

0

私はこの質問がMicrosoft forumに再尋ね、彼らは私にいくつかのガイダンスを提供するようなものだった:

基本的に私の質問は以下のように言い換えることができます。

  • アプリケーションに一度だけ、データベースから読み込ん
  • を開始
  • データベース(パフォーマンス用)ではなく、ローカルデータからすべての後続クエリを実行します。
  • エンティティが追加または削除されるたびにコンテキストとデータベースの両方に書き込みます。

クエリがデータベースに送られるため、プレーンEFでは不可能です。これは、開始時にデータを高速で、次にキャッシュと読み込む必要があることを意味します。

実装の詳細:

最良の方法は、entities not connected to contextを使用して、たとえば、高速なデータをインポートし、それをキャッシュするためにESQLを使用しているようです。私の最初の実験からはうまくいくようです。

+1

EFはIdentityMapパターンを実装しているため、すべてのエンティティがコンテキスト内にキャッシュされます。したがって、すべてのエンティティをコンテキストにロードすると、DBへのクエリはこれ以上ありません。 –

2

正に、私はこのようなことをしてきました。私の答えは、データベース全体をローカルにコピーして作業することでした。

読んで書いているだけでなく、私は間違いなくCEを破棄して、Sql ServerのExpressバージョンの1つをインストールすることをお勧めします。彼らはこのような状況のために設計されています。 CEは*ではありません。

* SP1は同時アクセスに適していますが、大規模なデータセットではネットワーク上でパフォーマンスが低下することはありません。

関連する問題