簡體   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