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

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

  • 相关阅读:
    Execl获取真实行数
    日期工具类
    Eclipse & IDEA快捷键对比大全
    【转】IDEA导入Eclipse项目 详细步骤(亲自验证导入成功)
    京东的四大集团
    马云演讲视频
    阿里系的一些重要网站
    阿里系的几个电商网站
    腾讯几款QQ软件
    电脑版微信使用说明
  • 原文地址:https://www.cnblogs.com/qwfy-y/p/11865004.html
Copyright © 2011-2022 走看看