我々は、Windows Azure環境でEntity Frameworkを使用していますが、これまではInProcセッション状態を使用していましたが、分散している性質のため、 Azure AppFabric Cacheを起動した理由です。セッションAzureキャッシュのEF動的プロキシー
我々は次の例外を持つ開始し、このセッション状態プロバイダー活性化:
ObjectDisposedException: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.]
System.Data.Objects.ObjectContext.EnsureConnection() +11658009
System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +66
System.Data.Objects.DataClasses.EntityCollection`1.Load(List`1 collection, MergeOption mergeOption) +271
System.Data.Objects.DataClasses.RelatedEnd.DeferredLoad() +499
System.Data.Objects.Internal.LazyLoadBehavior.LoadProperty(TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull, Object wrapperObject) +136
System.Data.Objects.Internal.<>c__DisplayClass7`2.<GetInterceptorDelegate>b__1(TProxy proxy, TItem item) +153
System.Data.Entity.DynamicProxies.SysUser_1A4439A55EAE70AD5C976139AA3A390B54A2C96E5FA605B3F364F0ADF52D0707.get_Assignments() +151
WriteSysUser_1A4439A55EAE70AD5C976139AA3A390B54A2C96E5FA605B3F364F0ADF52D0707ToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract) +544
...
この例外は、AppFabricのキャッシュにEFのオブジェクトをシリアル化しようとしたときにスローされているようだが。
LazyLoadingフラグとProxyCreationフラグが両方とも有効なEFを使用していますが、これはこのシナリオではサポートされていないようですが、InProcセッション状態管理にありました。
遅延ロードを維持しながら、Azure AppFabricセッションステートプロバイダをEFで使用する方法に関するいくつかの提案を探しています。
おかげで、 ルイ
InProcセッションを使用しているときに動作していることについて、お答えいただきありがとうございます。唯一の推測は、エラーがスローされた場所のように見えるため、シリアル化が別の方法で行われていることです。プロジェクトはInProcからAzureキャッシュへのセッション構成でしたが、他のすべてのロジックは同じです。 まだ遅延読み込みが必要なので、エンティティをセッションに格納することは可能ですか?もしそうなら、それを行う方法は最初にそれらを切り離すことですか?どうすればそれをすることができますか? – Rui
InProcセッションはシリアル化を使用しません。既存のオブジェクトへの参照だけを保持します。コンテキスト上で 'Detach'を呼び出すだけでエンティティをデタッチすることができます。しかし、一旦それを行うと、遅延読み込みができなくなり、セッションに保存されたポイントエンティティは後で遅延読み込みを使用できなくなります。 –
キャッシュ後、これらのエンティティの遅延読み込みはもはや利用できないことを理解しています。エンティティをセッションに送信する前にdetachを呼び出すだけでは機能していないようです。より明確にするために、私の目標は、ロジックの残りの部分で遅延ロードを維持し、基本プロパティ(実際のPOCO)とセッションするためにEFエンティティを格納する機能を持たせることです。あなたは新しいクラスを作成せずにこれを達成する方法を知っていますか? – Rui