2012-04-19 12 views
8

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

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

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

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

+1

http://stackoverflow.com/a/3293286/782754遅延ロードのプロパティをマークすることはできませんが、他の概念に –

答えて

11

Garrison、 「エンティティ分割」という機能を使用すると、2つの関連するエンティティを1つのテーブルにマップできます。したがって、最初のエンティティでは、filestreamプロパティを除くすべてのエンティティを使用します。 2番目のエンティティでは、主キー(最初のエンティティと同じ)とfilestreamプロパティを持ちます。モデル内のエンティティ間に1つの関係を作成し、両方のエンティティを同じテーブルにマッピングします。これで、filestreamを持つエンティティは関連しており、必要に応じて読み込みまたは読み込みを行うことができます。唯一の欠点は、それがメインエンティティのプロパティではないことです。そのため、関連するエンティティに移動してからプロパティに移動する必要があります。

myEntity.MyRelatedEntity.TheFileStreamProperty

は、ここで私はそれを書いたold blog postがEDMデザイナでこれを行う方法を示します。

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

HTH ジュリー

+0

おかげで、ジュリーを使用することができます。これは私が探していたものです! –

+0

聞くのは嬉しいです! :) –

関連する問題