我的上下文注册如下:
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);
造成了各种各样的问题,我不明白为什么上下文不是新的。我在这里缺少什么?
答案 0 :(得分:1)
如果要在每个请求上创建新实例,请使用
InstancePerDependency
代替InstancePerLifetimeScope
InstancePerLifetimeScope
为每个范围创建一个实例,如果您不创建范围Autofac创建默认范围,并在任何地方使用
另请注意,如果您在asp.net项目中,更好的做法是为每个请求使用一个实例InstancePerRequest