首页 > 解决方案 > 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()

标签: c#

解决方案


不要重用DbContext...没有必要,无论如何都会缓存连接,并且不会给您带来明显的好处。但是,它可能会引入几个问题

把它放在一个using声明中

using(var db = new DbContext())
{
    // much better and wont be disposed 
    db.CmsContent...
}

推荐阅读