0

我正在使用 Entity Framework 6 的序列化模型对象存储在会话中。会话状态根据以下设置存储在数据库中:

<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"/>

由于实体框架关系,一些序列化对象也确实具有组合的父对象。组合对象显示为

“函数评估需要所有线程运行”

在调试这些组合对象时带有十字符号(一旦单击十字,它会显示值)。这些组合对象(具有“函数评估需要所有线程运行”)在从下一页的会话中检索时变为空,而其他值按预期检索。 调试

根据以下设置,所有这些代码都适用于“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>

任何人都可以帮忙吗?

4

1 回答 1

0

您正在会话中保存具有延迟加载关系的实体。这不适用于 InProc(用于检索实体的上下文将在尝试加载关系时被释放),并且不适用于 SQL:您无法序列化数据库连接。

解决方案:

  • 不要在会话中存储实体,而是将它们映射到更接近您需要的模型。
  • 将实体存储在会话中(你真的不应该),但显式加载所有关系,因此不需要更多的数据库访问来读取对象的属性。
于 2017-05-22T13:47:38.550 回答