[英]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.