10

私はファイル ストレージ アプリケーションを開発しており、データベースに FileStream タイプを組み込みました。システムは大きなファイルをサポートすることが期待されています。アプリケーションの一部では、複数のドキュメントを一括アップロードできます。これらのドキュメントは、システム内の他のエンティティにリンクする必要があります。

1 つのページは、リンクされていないドキュメントを表示するように設計されており、ユーザーはドキュメントを一度に 1 つずつエンティティにリンクできます。アップロード プロセスの負荷テストを行った後、このリンクされていないドキュメント ページを読み込むと、ASP.NET ワーカー プロセスのメモリ フットプリントが 1 GB を超えることがわかりました。

調査の結果、Entity Framework は、リンクされていない数百のドキュメントのドキュメント行エンティティ全体 (バイト配列に変換された FileStream を含む) を読み込んでいるようです。私のリポジトリ クラスでは、Model に変換するときにこのバイト配列を保存しませんが、それでは手遅れです。EF は、時間とメモリを費やして、バイト配列を Repository クラス表現に割り当てました。

明示的に要求しない限り、このバイト配列をロードしないように EF に指示する方法はありますか?

4

1 に答える 1

13

Garrison さん、関連する 2 つのエンティティを 1 つのテーブルにマップする「エンティティ分割」と呼ばれる機能を使用できます。したがって、最初のエンティティには、filestream プロパティ以外のすべてが含まれます。2 番目のエンティティには、主キー (最初のエンティティと同じ) と filestream プロパティがあります。モデル内のエンティティ間に 1 対 1 の関係を作成し、両方のエンティティを同じテーブルにマップします。これで、ファイルストリームを持つエンティティが関連付けられ、必要に応じてそれをロードまたは遅延ロードできます。唯一の欠点は、それがメイン エンティティのプロパティではないことです。そのため、関連エンティティに移動してからプロパティに移動する必要があります。

myEntity.MyRelatedEntity.TheFileStreamProperty

これは、私が書いた古いブログ投稿で、EDM Designer でこれを行う方法を示しています。

Code FIrst でも同じマッピングを実現できます。これは、エンティティ分割の記事を含む、私が書いた MSDN の記事です。http://msdn.microsoft.com/en-us/data/hh272551

HTH ジュリー

于 2012-04-20T00:08:01.847 に答える