MVC5 + Autofac:DbContext 被重用

MVC5 + Autofac: DbContext is being reused

我的上下文是这样注册的:

 internal class DbContextModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.Register(ctx => new CRTechEntities()).InstancePerLifetimeScope();
    }
}

控制器注册如下:

builder.RegisterControllers(Assembly.GetExecutingAssembly()).InstancePerLifetimeScope();

在其中一个存储库中,我在 ctor 中请求它,但是它不是一个新的上下文..

 if(_context.ChangeTracker.Entries().Any())
    _context.ChangeTracker.Entries().ToList().Each(e => e.State = EntityState.Detached);

引起了各种各样的问题,我不明白为什么上下文不是新的。我在这里错过了什么?

如果您想在每个请求上创建新实例,请使用

InstancePerDependency 而不是 InstancePerLifetimeScope

InstancePerLifetimeScope 为每个范围创建一个实例,如果你不创建范围 Autofac 创建默认范围,并在任何地方使用它

另请注意,如果您在 asp.net 项目中,最好为每个请求使用一个实例 InstancePerRequest

更多关于check here