3

私は、大きな dbContext (800 以上のエンティティ) を持つ Entity Framework Code First プロジェクトに取り組んでいます。

私が抱えている問題は、初めてメタデータを構築してコンパイルするのに最大 30 秒かかることです。AppFabric WarmUp の助けを借りても、すべてのファーム サーバーがそのような方法で最初の要求 (WCF) を遅らせる余裕はありません。モジュール。1 つのオプションとして、コンパイルされたモデルを分散キャッシュにキャッシュすることができます。これにより、ファーム内の他のサーバーは、DbContext をインスタンス化するときに既存のモデルを利用できます。

私が見つけたいくつかのこと:

  • DbCompiledModel インスタンスはシリアル化できません。
  • DbCompiledModel は、「ICachedMetadataWorkspace」の実装を使用して、「CodeFirstCachedMetadataWorkspace」と呼ばれるそのメタデータをキャッシュします。
  • 「CodeFirstCachedMetadataWorkspace」(または「ICachedMetadataWorkspace」でさえも) を実際に使用して、(「DbDatabaseMapping.ToMetadataWorkspace」メソッドの助けを借りて) シリアル化可能なワークスペースを提供し、分散キャッシュに xml として格納することができます。

残念ながら、言及されているすべての型は EF Code First によって内部として定義されており (もちろん DbCompiledModel を除く)、今までこれをプロセスからキャッシュする適切な方法を見つけることができませんでした。

私が試したもう1つのことは、csdl、ssdl、およびmslマッピングを(dbスキーマから)プログラムで生成/ロードするカスタムObjectContext(DbContextコンストラクターで使用するため)を用意することでしたが、実際のビュー(pocoクラス)はまだ残っています全体的な db コンテキストにマップされていません。

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

0

EFチームのArthurVickersによるこのブログ投稿を試してください:http://blog.oneunicorn.com/2012/04/21/code-first-building-blocks/

具体的には、コンパイルされたモデルをキャッシュする方法を示しています。

于 2012-06-12T14:07:02.207 に答える