如果未在ASP.net页面上声明实体框架,为什么会在该页面上调用它呢?

时间:2018-06-25 10:58:05

标签: c# asp.net iis

我有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");     
        }

我不断收到此错误:

  

“底层提供程序在打开时失败。”

堆栈跟踪为:

  

在System.Data.Entity.Core.EntityClient.EntityConnection.Open()
  在   System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(布尔   shouldMonitorTransactions)   System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction [T](Func 1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectQuery 1。<> c__DisplayClass7.b__5()   在   System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute [TResult](Func 1 operation) at System.Data.Entity.Core.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption) at System.Data.Entity.Core.Objects.ObjectQuery 1..GetEnumerator> b__0()   在System.Data.Entity.Internal.LazyEnumerator 1.MoveNext() at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable 1处)   在   System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.b__2 [TResult](IEnumerable 1 sequence) at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable 1   查询,表达式queryRoot)在   System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute [TResult](表达式   表达式)   System.Linq.Queryable.SingleOrDefault [TSource](IQueryable 1 source)
at System.Data.Entity.Internal.Linq.InternalSet
1.FindInStore(WrappedEntityKey   键,字符串为keyValuesParamName)   System.Data.Entity.Internal.Linq.InternalSet 1.Find(Object[] keyValues) at System.Data.Entity.DbSet 1.Find(Object [] keyValues)
  在System.Web.Providers.DefaultSessionStateProvider.DoGet(HttpContext   上下文,字符串ID,布尔值独占,布尔值和锁定,TimeSpan&   lockAge,Object&lockId,SessionStateActions和action)位于   System.Web.Providers.DefaultSessionStateProvider.GetItemExclusive(HttpContext   上下文,字符串ID,布尔值和锁定,时间跨度和lockAge,对象和   lockId,SessionStateActions和操作)   System.Web.SessionState.SessionStateModule.GetSessionStateItem()位于   System.Web.SessionState.SessionStateModule.BeginAcquireState(Object   源,EventArgs e,AsyncCallback cb,对象extraData)位于   System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   在System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep步骤)
  在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,   布尔值和同步完成)

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

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

如何解决此问题,并确保在数据库处于脱机状态时显示错误页面。

1 个答案:

答案 0 :(得分:0)

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

要进入错误页面,我必须使用指令EnableSessionState="false"从错误页面中删除会话状态。