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

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

  • 相关阅读:
    学习进度条15
    学习进度条14
    第二冲刺阶段——个人工作总结10
    购买图书最低价格
    第二冲刺阶段——个人工作总结09
    第二冲刺阶段——个人工作总结08
    第二冲刺阶段——个人工作总结07
    第二冲刺阶段——个人工作总结06
    学习进度条13
    第二冲刺阶段——个人工作总结05
  • 原文地址:https://www.cnblogs.com/qwfy-y/p/11865004.html
Copyright © 2011-2022 走看看