关于EFCore线程内惟一

EntityFramework的线程内惟一

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

EntityFrameworkCore的线程内惟一

咱们都知道.net Core的数据库上下文对象是在容器里注册,在用到的时候经过依赖注入建立的,那要如何保证每次请求只建立一个对象呢?
咱们能够在注册的时候,经过设置ServiceLifetime属性来达到目的。ui

services.AddDbContext<MyContext>(options =>
            {
                // var connectionString = Configuration["ConnectionStrings:DefaultConnection"];
                var connectionString = Configuration.GetConnectionString("DefaultConnection");
                options.UseSqlite(connectionString);
            },ServiceLifetime.Scoped);

经过查看AddDbContext这个方法咱们能够发现,ServiceLifetime这个属性默认就是每次请求建立一次this

public static IServiceCollection AddDbContext<TContext>([NotNull] this IServiceCollection serviceCollection, [CanBeNull] Action<DbContextOptionsBuilder> optionsAction = null, ServiceLifetime                     contextLifetime = ServiceLifetime.Scoped, ServiceLifetime optionsLifetime = ServiceLifetime.Scoped) where TContext : DbContext
        {
            return serviceCollection.AddDbContext<TContext, TContext>(optionsAction, contextLifetime, optionsLifetime);
        }

因此咱们彻底不须要手动去指定(^▽^).net

相关文章
相关标签/搜索