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

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

05-11 22:41