zoukankan      html  css  js  c++  java
  • 关于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属性来达到目的。

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

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

  • 相关阅读:
    ubuntu系统下安装最新版的MySQL
    scp本地服务器和远程服务器拷贝文件
    linux设置环境变量
    PHP程序员玩转Linux系列-lnmp环境的搭建
    nginx与负载均衡
    Linux下vim的常用命令总结
    nginx与location规则
    ssh秘钥对免密码登陆
    ubuntu下安装php pdo扩展和导入数据库
    ArrayList的删除实现
  • 原文地址:https://www.cnblogs.com/qwfy-y/p/11865004.html
Copyright © 2011-2022 走看看