关于EFCore线程内唯一

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

关于EFCore线程内唯一

却望风月   2019-11-15 我要评论

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属性来达到目的。

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

通过查看AddDbContext这个方法我们可以发现,ServiceLifetime这个属性默认就是每次请求创建一次

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

所以我们完全不需要手动去指定(^▽^)

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们