关于EFCore线程内唯一
程序员文章站
2022-05-03 12:45:32
EntityFramework的线程内唯一 EntityFramework的线程内唯一是通过httpcontext来实现的 EntityFrameworkCore的线程内唯一 我们都知道.net Core的数据库上下文对象是在容器里注册,在用到的时候通过依赖注入创建的,那要如何保证每次请求只创建一个 ......
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); }
所以我们完全不需要手动去指定(^▽^)
上一篇: c# 发送邮箱,企业邮箱测试成功
下一篇: 固原美食有哪些,如何烹饪固原美食