c# - asp.net core 2.1中无法访问已处理的对象如何解决?
问题描述
我有一个项目 asp.net core 2.1。dbcontext 创建查询时发生错误。
我创建了一个带有检查 url 路径的 IRouteConstraint。
public bool Match(HttpContext httpContext, IRouter route, string parameterName,
RouteValueDictionary values, RouteDirection routeDirection)
{
var routeSlug1 = (string)values["contentCategory"];
var routeSlug2 = (string)values["content"];
bool slugMatch = false;
if (!string.IsNullOrEmpty(routeSlug1) && !string.IsNullOrEmpty(routeSlug2))
{
//var Data = db.CmsContent.FirstOrDefault(x => x.Tag == routeSlug2 && x.ContentCategory.Tag == routeSlug1); //.ToList() //The error is here!!!!
var Data = db.CmsContent.ToList(); //The error is here!!!!
if (Data != null)
{
return true;
}
}
return slugMatch;
}
System.ObjectDisposedException: '无法访问已处置的对象。
在 Cms.Infrastructure.CmsContentConstraint.Match(HttpContext httpContext, IRouter route, String parameterName, RouteValueDictionary values, RouteDirection routeDirection) 在 E:\Cms\Infrastructure\RouteConstraints.cs: Microsoft.AspNetCore.Routing.RouteConstraintMatcher.Match(IDictionary) 的第 35 行`2 约束,RouteValueDictionary routeValues,HttpContext httpContext,IRouter 路由,RouteDirection routeDirection,ILogger 记录器)在 Microsoft.AspNetCore.Routing.RouteBase.RouteAsync(RouteContext context) 在 Microsoft.AspNetCore.Routing.RouteCollection.d__10.MoveNext()
解决方案
不要重用DbContext
...没有必要,无论如何都会缓存连接,并且不会给您带来明显的好处。但是,它可能会引入几个问题
把它放在一个using
声明中
using(var db = new DbContext())
{
// much better and wont be disposed
db.CmsContent...
}
推荐阅读
- python - python替换数据框熊猫中所有列的多个值
- sql - 当 Rows 对应于其他列中的 MAX 时保持 NULL
- firebase - 我可以使用不同的参数并行运行自定义菜单中的谷歌应用程序脚本功能吗?
- javascript - FIrebase 应用程序未在 Vue3-Ionic 项目上初始化
- javascript - 检查 JS 远程替换、Shopify 中的变体可用性
- docker - 仅在发布阶段指定环境变量
- python - 从Python中的稀疏矩阵开始获取图形中路径/行走数量的有效方法
- python - 如何避免对不同大小的输入进行张量流回溯
- amazon-web-services - 具有多个客户网关的 AWS 冗余站点到站点 vpn
- javascript - 无需购买域名和托管即可使用 React 应用