繁体   English   中英

如何解决asp.net core 2.1中无法访问已处置对象?

[英]How to solve Cannot access a disposed object in 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:'无法访问已处置的对象。
在Microsoft.AspNetCore.Routing.RouteConstraintMatcher.Match(IDictionary)的E:\\ Cms \\ Infrastructure \\ RouteConstraints.cs:第35行的Cms.Infrastructure.CmsContentConstraint.Match(HttpContext httpContext,IRouter路由,字符串parameterName,RouteValueDictionary值,RouteDirection routeDirection)处`2约束,位于Microsoft.AspNetCore.Routing.RouteBase.RouteAsync(RouteContext上下文),位于Microsoft.AspNetCore.Routing.RouteBase.RouteAsync(RouteContext上下文),位于RoutePath上,位于Microsoft.AspNetCore.Routing.RouteCollection.d__10.MoveNext()处。

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

将其放在using语句中

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM