Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 注入DbContext并使用一个连接执行多个查询_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 注入DbContext并使用一个连接执行多个查询

C# 注入DbContext并使用一个连接执行多个查询,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我正在使用EF Core和ASP.NET Core: public partial class SecurityDBContext : DbContext { // injecting the DBcontext from the ASP.NET or Bootstrap applicaiton with the required connection string public SecurityDBContext(DbContextOptions options)

我正在使用EF Core和ASP.NET Core:

 public partial class SecurityDBContext : DbContext
 {
      // injecting the DBcontext from the ASP.NET or Bootstrap applicaiton with the required connection string
      public SecurityDBContext(DbContextOptions options) : base(options)
      {

      }
}
这是我的存储库类,我将在其中注入所需的上下文:

 public class UserRepository : IUserRepository
{
    private SecurityDBContext securityDb;
    private readonly ILogger<UserRepository> _logger;

    public UserRepository(SecurityDBContext securityContext, ILogger<UserRepository> logger)
    {
        securityDb = securityContext;
        _logger = logger;

    }
    public void MultipleQueries(int id)
    {

        var result1= securityDb.Users.Where(u=> u.Id == id).SingleOrDefault();


       //var result2 = securityDb.Table2.Where(...)ToList();
    }
公共类用户存储库:IUserRepository
{
私有SecurityDBContext securityDb;
专用只读ILogger\u记录器;
公共用户存储库(SecurityDBContext securityContext,ILogger记录器)
{
securityDb=securityContext;
_记录器=记录器;
}
公共void多任务(int-id)
{
var result1=securityDb.Users.Where(u=>u.Id==Id.SingleOrDefault();
//var result2=securityDb.Table2.Where(…)ToList();
}
以下是我如何通过依赖关系:

var securityDB = configurationRoot.GetConnectionString("SecurityDatabase");
if (securityDB == null)
   {
       throw new ArgumentNullException("SecurityDatabase ConnectionString");
   }
//EnityDB
    services.AddEntityFrameworkSqlServer().AddDbContext<SecurityCore.Repositories.SecurityDBContext>(options => options.UseSqlServer(securityDB));
var securityDB=configurationRoot.GetConnectionString(“SecurityDatabase”);
if(securityDB==null)
{
抛出新ArgumentNullException(“SecurityDatabase ConnectionString”);
}
//EnityDB
services.AddEntityFrameworkSqlServer().AddDbContext(options=>options.UseSqlServer(securityDB));

假设结果2和结果3在不同的DB实体上执行,上下文是否为每个查询打开连接?如果是,那么我如何根据最佳实践避免这种情况,并通过一个连接进行查询。

保持连接打开不是最佳实践。@GertArnold,请澄清,您的意思是它总是打开的吗既然我没有处理它,依赖注入框架不应该管理它吗?上下文管理它自己的数据库连接,你不必担心这一点。只要使用上下文,只要你需要它(标准是:在一个请求期间)不要打开和关闭数据库连接。不,我是说你不应该担心连接。我不理解你的问题。你担心什么?当你只使用注入的上下文时,你认为你不能做什么?@h.salman:你有任何证据支持你的假设吗?DbContext在其中保留一个连接池并重用它。没有必要自己管理连接。你不应该做任何形式的先发制人的优化,而不是声称有问题!!!