本文共 1444 字,大约阅读时间需要 4 分钟。
EntityFramework的线程内唯一是通过httpcontext来实现的
public static DbContext DbContext() { DbContext dbContext = HttpContext.Current.Items["dbContext"] as DbContext; if (dbContext == null) { dbContext = new WebEntities(); HttpContext.Current.Items["dbContext"] = dbContext; } return dbContext; }
我们都知道.net Core的数据库上下文对象是在容器里注册,在用到的时候通过依赖注入创建的,那要如何保证每次请求只创建一个对象呢?
我们可以在注册的时候,通过设置ServiceLifetime属性来达到目的。services.AddDbContext(options => { // var connectionString = Configuration["ConnectionStrings:DefaultConnection"]; var connectionString = Configuration.GetConnectionString("DefaultConnection"); options.UseSqlite(connectionString); },ServiceLifetime.Scoped);
通过查看AddDbContext这个方法我们可以发现,ServiceLifetime这个属性默认就是每次请求创建一次
public static IServiceCollection AddDbContext([NotNull] this IServiceCollection serviceCollection, [CanBeNull] Action optionsAction = null, ServiceLifetime contextLifetime = ServiceLifetime.Scoped, ServiceLifetime optionsLifetime = ServiceLifetime.Scoped) where TContext : DbContext { return serviceCollection.AddDbContext (optionsAction, contextLifetime, optionsLifetime); }
所以我们完全不需要手动去指定(▽)
转载地址:http://iakki.baihongyu.com/