2

EFクエリの結果をAzureAppFabricキャッシュにキャッシュする方法を理解しようとしています。現在、キャッシュを処理するためにLoreSoft EntityFramework拡張機能を使用しています(http://bit.ly/LWSywm)。インメモリキャッシュでは完全に機能しますが、複数のVMにまたがるAppFabricではそれほど機能しません。問題は、EFオブジェクトに仮想プロパティがあり、それらが動的プロキシオブジェクトとしてシリアル化されていることです。もちろん、別のVMで、または単一のVMでアプリケーションを再起動した後でも逆シリアル化することはできません。

キャッシュする必要のあるクエリはわずかしかないため、プロジェクト全体で関連するすべてのオブジェクトを手動でロードするのではありません。仮想プロパティを使用してEFオブジェクトをシリアル化する方法はありますか?逆シリアル化した後、仮想プロパティを魔法のように遅延読み込みを再開する必要はありません。結果をシリアル化する前に、DbContextの遅延読み込みをオフにしようとしましたが、機能しません。シリアル化可能なEFオブジェクトを取得する唯一の方法は、すべての仮想プロパティを削除することです。

ちなみに私はここでジュリーラーマンの記事を見てきました:http://bit.ly/LWToZT

かっこいいプロジェクトのようですが、EFオブジェクトをシリアル化できないという私の問題が解決するかどうかは完全にはわかりません。私が始めたところにたどり着くつもりなら、その道を下りたくない。

どんなアイデアでも大歓迎です!

4

2 に答える 2

4

プロキシオブジェクトを使用しないようにdbcontext(またはオブジェクトコンテキスト)を構成できます。明らかに、これは変更の追跡や遅延読み込みがないことを意味します。オブジェクトのナビゲーションプロパティを熱心にロードしない場合、プロキシへの参照ではなく、単にnullになります。これは、コンテキストの存続期間を通じてオンとオフを切り替えることができるため、オールオアナッシングの決定ではないことに注意してください。

DbContextを使用している場合、構文は次のとおりです。

context.Configuration.ProxyCreationEnabled = false;
于 2012-07-01T00:44:07.373 に答える
1

同様の問題が発生しました。EFを使用してデータベースから読み取ったデータを返すサービスがありました。このデータはAppfabricにキャッシュする必要がありました。

この場合、サービスはDTOオブジェクトを返したため、EFオブジェクトをDTOオブジェクトにマッピングし、DTOオブジェクトをAppfabricキャッシュに保存しました。

于 2012-06-30T21:14:49.633 に答える