首页 > 解决方案 > 为什么在 ASP.net 页面上未声明实体框架时会调用它?

问题描述

我有 ASP.NET 网站。我故意使数据库脱机,以便我可以检查我的自定义错误页面是否运行正常并显示。

在我的错误页面中:我没有使用任何 ASP.NET 实体框架。这是一个 ASP.NET 页面,因为我正在使用资源进行本地化。(&因此将无法转换为 html 页面)

我的 Web.config 是这样说的:

 <system.webServer>
  <httpErrors errorMode="DetailedLocalOnly" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="13" />
    <error statusCode="404" subStatusCode="13" prefixLanguageFilePath="" path="LargeFileError.aspx" responseMode="Redirect" />
      <remove statusCode="500" />
      <error statusCode="500" path="Error.aspx" responseMode="ExecuteURL"/>
  </httpErrors>
 </system.webServer>

 <system.web>
  <customErrors mode="On" defaultRedirect="/Error.aspx" redirectMode="ResponseRewrite">    
    <error statusCode="500" redirect="Error.aspx" />
  </customErrors>
</system.web>

在 Global.asax 的 Application_Error 中。

  protected void Application_Error(object sender, EventArgs e)
        {
           Exception exception = Server.GetLastError();
             Response.Clear();
            Server.ClearError(); 
           Response.Redirect("Error.aspx");     
        }

我不断收到此错误:

“底层提供商在 Open 上失败。”

堆栈跟踪是:

在 System.Data.Entity.Core.EntityClient.EntityConnection.Open()
在 System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions) 在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T ]( 1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectQuerySystem.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult] 处的函数 1.<>c__DisplayClass7.b__5()(System.Data.Entity.Internal 处的1 operation) at System.Data.Entity.Core.Objects.ObjectQuery函数 1.GetResults(Nullable 1 forMergeOption) at System.Data.Entity.Core.Objects.ObjectQuery1..GetEnumerator>b__0() .LazyEnumerator 1.MoveNext() at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable1 源)在 System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.b__2[TResult](IEnumerable1 sequence) at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerableSystem.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable 1.1 查询,Expression queryRoot ) FindInStore(WrappedEntityKey key, String keyValuesParamName) 在 System.Data.Entity.Internal.Linq.InternalSet 1.Find(Object[] keyValues)1 source)
at System.Data.Entity.Internal.Linq.InternalSet
1.Find(Object[] keyValues) at System.Data.Entity.DbSet
在 System.Web.Providers.DefaultSessionStateProvider.DoGet(HttpContext context, String id, Boolean Exclusive, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actions) 在 System.Web.Providers.DefaultSessionStateProvider.GetItemExclusive(HttpContext context, String id, Boolean&在 System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData) 在 System.Web.SessionState.SessionStateModule.GetSessionStateItem() 在 System.Web .HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep 步骤)
在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,Boolean& completedSynchronously)

你可能会说这个错误有很多堆栈溢出的解决方案。我已经浏览了它们并且它们对我没有帮助,因为在那个错误页面中我根本没有实体框架(我的网站页面确实有它)并且我期待这个错误会出现。

即使我要导航到 error.aspx 页面,我也会收到此错误。此页面没有引用 asp.net 实体框架。

如何解决此问题并确保在数据库脱机时显示我的错误页面。

标签: c#asp.netiis

解决方案


问题是我的会话被存储在数据库中,因此即使在 error.aspx 页面中也来自实体框架的调用。

要将其带到错误页面,我必须使用指令从错误页面中删除会话状态EnableSessionState="false"


推荐阅读