简体   繁体   English

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

[英]How to solve Cannot access a disposed object in asp.net core 2.1?

I have a project asp.net core 2.1. 我有一个项目asp.net core 2.1。 Error occurs when a dbcontext create a query. dbcontext创建查询时发生错误。

I create a IRouteConstraint with check url path. 我创建带有检查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: 'Cannot access a disposed object. System.ObjectDisposedException:'无法访问已处置的对象。
at Cms.Infrastructure.CmsContentConstraint.Match(HttpContext httpContext, IRouter route, String parameterName, RouteValueDictionary values, RouteDirection routeDirection) in E:\\Cms\\Infrastructure\\RouteConstraints.cs:line 35 at Microsoft.AspNetCore.Routing.RouteConstraintMatcher.Match(IDictionary`2 constraints, RouteValueDictionary routeValues, HttpContext httpContext, IRouter route, RouteDirection routeDirection, ILogger logger) at Microsoft.AspNetCore.Routing.RouteBase.RouteAsync(RouteContext context) at Microsoft.AspNetCore.Routing.RouteCollection.d__10.MoveNext() 在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()处。

Don't reuse a DbContext ... There is no need, connections are cached anyway, and gives you no appreciable benefits. 不要重用DbContext ...没必要,无论如何连接都会被缓存,并且不会给您带来明显的好处。 However, it can introduce several problems 但是,它可能会带来一些问题

Put it in a using statement 将其放在using语句中

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

暂无
暂无

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

相关问题 无法访问ASP.NET Core后台服务中的已处置对象 - Cannot access a disposed object in ASP.NET Core background service 无法访问已处置的 object Asp.net Identity Core - Cannot access a disposed object Asp.net Identity Core 无法访问已处理的对象。此错误的原因 - 与依赖注入相关的 Asp.net Core 异常 - Cannot access a disposed object.cause of this error - Asp.net Core Exception related to Dependency Injection 注入 DbContext 时无法访问 ASP.NET Core 中已处理的对象 - Cannot access a disposed object in ASP.NET Core when injecting DbContext 在ASP.NET Core授权属性中将存储库与DbContext一起使用:“无法访问已处置的对象” - Use repository with DbContext in ASP.NET Core Authorize-Attribute: “Cannot access a disposed object” System.ObjectDisposedException:无法访问已处理的对象,ASP.NET Core 3.1 - System.ObjectDisposedException: Cannot access a disposed object, ASP.NET Core 3.1 C#:使用 IQueryable 注入 DbContext 时,无法访问 ASP.NET 核心中已处置的 object - C#: Cannot access a disposed object in ASP.NET Core when injecting DbContext with IQueryable Asp.net Core:无法访问已处置的对象(不同的错误) - Asp.net Core: Can not access a disposed object (different errors) 无法访问已处理的对象 Datacontext asp.net 5 - cannot access a disposed object Datacontext asp.net 5 .Net Core 2.1 - 无法访问已处置的 object.Object 名称:'IServiceProvider' - .Net Core 2.1 - Cannot access a disposed object.Object name: 'IServiceProvider'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM