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
我的上下文是这样注册的:
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