例外:ObjectContext的实例已被释放,并且可以不再被用于需要连接的操作。随着残疾人惰性加载

问题描述 投票:1回答:1

偶尔,我得到了以下异常:“该ObjectContext的实例已经设置,不能再用于需要连接的操作”。

此异常的再现不稳定,很难抓到。

一般情况下,我得到这个异常,当两个或两个以上的请求被通过浏览器同时发送。

集成测试使用的DbContext的唯一实例分析和模型方法的后续执行同时运行数百个线程。虽然,本次测试并没有抛出任何异常,并通过。

抛出异常在所述第一请求到DB:

public IForumCategory GetCategoryById(int id)
{
    return Repository.ForumCategories.FirstOrDefault(a => a.Id == id);
}

延迟加载已停用,未使用的导航性能。 “包括”也未使用,通过“加入”所取代。

处置的DbContext:

public abstract class WebApiDependencyScope<TModelFactory> : IDependencyScope where TModelFactory : ModelFactory
{
    ...

    public virtual void Dispose()
    {
        ModelFactory.Dispose();
    }

    ...
}

的DbContext然后通过ModelFactory设置,因此它不能被认为是早期的DbContext设置

更新信息:按ASPNET的WebAPI框架每个请求创建的DbContext:

public override IDependencyScope BeginScope()       
{           
    ISiteRepositoryFactory repositoryFactory = new SiteAspNetRepositoryFactory(Config);
    GameModelFactory factory = new GameModelFactory(
     repositoryFactory, LocaleProvider, Config, Authenticate);

    Scope = new GameWebApiDependencyScope(factory);
    return Scope;
}
c# entity-framework lazy-loading
1个回答
0
投票

我不明白,直到结束,但也许...

什么情况发生:我每次创建子范围和分配给它的根范围。但是,当请求结束的每一个孩子范围处置。在这一刻这样根范围内可具有设置范围,当它试图从这个范围创建服务我有这样的例外。

如何以及为什么根范围内引发此特定的异常,我不知道。

现在BeginScope的样子:

public override IDependencyScope BeginScope()       
{           
    ISiteRepositoryFactory repositoryFactory = new SiteAspNetRepositoryFactory(Config);
    GameModelFactory factory = new GameModelFactory(
     repositoryFactory, LocaleProvider, Config, Authenticate);

    return new GameWebApiDependencyScope(factory);
}

和根范围中初始化解析器构造的。我可能有固定的问题,但是这是不完全的,因为异常是不稳定的。

© www.soinside.com 2019 - 2024. All rights reserved.