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

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

  • 相关阅读:
    贪婪与非贪婪模式
    Arduino语言介绍
    POJ 3249 记忆化搜索或拓扑排序
    POJ 3177 缩点 + 边双连通图
    POJ 1637 网络流构图
    hdu 1285 拓扑排序+优先队列
    POJ 3160 缩点+拓扑排序+简单dp
    POJ 3592 缩点+拓扑排序+最长路
    针对11级队员的暑假训练计划(初稿)
    POJ 2762 缩点+判断是否是最长链
  • 原文地址:https://www.cnblogs.com/qwfy-y/p/11865004.html
Copyright © 2011-2022 走看看