c# - 为什么在 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.ObjectQuery
System.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(Nullable1 forMergeOption) at System.Data.Entity.Core.Objects.ObjectQuery
1..GetEnumerator>b__0() .LazyEnumerator1.MoveNext() at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable
1 源)在 System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.b__2[TResult](IEnumerable1 sequence) at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable
System.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.InternalSet1.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 实体框架。
如何解决此问题并确保在数据库脱机时显示我的错误页面。
解决方案
问题是我的会话被存储在数据库中,因此即使在 error.aspx 页面中也来自实体框架的调用。
要将其带到错误页面,我必须使用指令从错误页面中删除会话状态EnableSessionState="false"
。
推荐阅读
- database-design - 软件设计:带有定制产品的购物车
- android - RoundedRectangleBorder 在颤动中不能与 ListTile 或 Card 一起使用
- azure - 防止 CosmosDB 文档中的数组换行符
- apache-spark - 将分区分配给不同的执行器而不是执行器线程
- azure - 用于请求的依赖注入 Azure 函数自定义对象
- javascript - 在javascript中完成后如何立即将线程返回到等待的函数?
- javascript - 反应中的 onChange
- minecraft - 如何为我的世界 1.16.4 forge mod 实现自定义披风
- html - 谷歌饼图数学
- express - 为什么我无法在我的明确请求中访问 rawBody