MVC5 + Autofac:正在重用DbContext

时间:2015-07-16 21:21:51

标签: entity-framework asp.net-mvc-5 autofac

我的上下文注册如下:

 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);

造成了各种各样的问题,我不明白为什么上下文不是新的。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

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

InstancePerDependency代替InstancePerLifetimeScope

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

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

有关check here

的更多信息