2017-05-22 30 views
0

セッションに格納するために、Entity Framework 6のSerialized Modelオブジェクトを使用しています。セッション状態は、これらの設定どおりにデータベースに格納されている:ASP.NET SessionState SQL Serverの問題

<sessionState mode="SQLServer"   
       stateConnectionString="tcpip=127.0.0.1:42424" 
       sqlConnectionString="data source=MyServer;integrated security=false;user id=MyUser;password=MyPassword;Application Name=MyAppName;"    
       cookieless="false" timeout="20"/> 

theesシリアライズされたオブジェクトの一部を構成親を持っているのは、Entity Frameworkの関係にすぎによるオブジェクト。構成オブジェクトが

として示されているそれらの構成オブジェクトのデバッグ中に×印と

「関数評価を実行するすべてのスレッドを必要とする」(一度クロスをクリックし、それが値を示します)。 これらの合成オブジェクト(「関数評価ではすべてのスレッドを実行する必要があります)は、次のページのセッションから取得するときにnullになり、他の値は期待どおりに取得されます。 Debugging

このコードはすべて、以下の設定に従って「InProc」セッション状態で動作します。

<sessionState mode="InProc" customProvider="DefaultSessionProvider"> 
     <providers> 
     <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" /> 
     </providers> 
    </sessionState> 

誰でも手助けできます。

答えて

0

セッション内に遅延ロードされたリレーションを持つエンティティを保存しています。これはInProcでは機能しません(エンティティを取得するために使用されるコンテキストはリレーションをロードしようとすると破棄されます)。SQLでは動作しません。データベース接続をシリアル化できません。

ソリューション:

  • は、セッション内のエンティティを保存するが、あなたのニーズに近いモデルにマッピングしないでください。
  • エンティティをセッションに格納します(実際には使用しないでください)が、明示的にすべてのリレーションをロードするので、オブジェクトのプロパティを読み取るためのデータベースへのアクセスは必要ありません。
+0

ありがとうございました! すべての関係を明示的に読み込むにはどうすればよいですか?セッションで保存するには大きすぎるオブジェクトを作っていませんか? –

関連する問題