Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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#_Entity Framework_Asp.net Core - Fatal编程技术网

C# 将参数传递给从DbContext继承的类

C# 将参数传递给从DbContext继承的类,c#,entity-framework,asp.net-core,C#,Entity Framework,Asp.net Core,我的应用程序是一个ASP.NET核心1.0 Web API。我正在使用实体框架 我不想像这样更改命令超时: public class MyDbContext: DbContext { private const int Timeout = 180; public MyDbContext(DbContextOptions options): base(options) { this.Database.SetCommandTimeout(Timeout); }

我的应用程序是一个
ASP.NET核心1.0 Web API
。我正在使用
实体框架

我不想像这样更改
命令超时

public class MyDbContext: DbContext
{
   private const int Timeout = 180;

   public MyDbContext(DbContextOptions options): base(options)
   {
       this.Database.SetCommandTimeout(Timeout);
   }
}
  "DbContextSettings": {
    "Timeout": "180"
  }
services.AddTransient<SomeRepository>();
public MyDbContext(DbContextOptions options, int timeout): base(options)
   {
       Timeout = timeout;
       this.Database.SetCommandTimeout(Timeout);
   }
如果在我的类中定义了
Timeout
,则此操作有效

但是,我希望在我的
appsettings.json
文件中包含我的
Timeout
值,如下所示:

public class MyDbContext: DbContext
{
   private const int Timeout = 180;

   public MyDbContext(DbContextOptions options): base(options)
   {
       this.Database.SetCommandTimeout(Timeout);
   }
}
  "DbContextSettings": {
    "Timeout": "180"
  }
services.AddTransient<SomeRepository>();
public MyDbContext(DbContextOptions options, int timeout): base(options)
   {
       Timeout = timeout;
       this.Database.SetCommandTimeout(Timeout);
   }
因此,现在有两种方法可以设置
命令超时

  • 命令timeoutingseconds
    作为参数传递给构造函数
  • 从我的类的构造函数中的
    appsettings.json
    中获取值
  • 我不知道如何实现其中一种方法

    这可能吗?或者是否有已知的解决方法

    编辑

    我从来没有真正初始化过MyDbContext。我在
    ConfigureServices
    Startup
    类中这样做:

    services.AddDbContext<MyDbContext>(db => db.UseSqlServer("secret"));
    
    SomeRepository
    从未被我初始化过。我通过
    启动
    中的
    依赖项注入
    执行此操作,如下所示:

    public class MyDbContext: DbContext
    {
       private const int Timeout = 180;
    
       public MyDbContext(DbContextOptions options): base(options)
       {
           this.Database.SetCommandTimeout(Timeout);
       }
    }
    
      "DbContextSettings": {
        "Timeout": "180"
      }
    
    services.AddTransient<SomeRepository>();
    
    public MyDbContext(DbContextOptions options, int timeout): base(options)
       {
           Timeout = timeout;
           this.Database.SetCommandTimeout(Timeout);
       }
    

    因此,我从不将
    MyDbContext
    的对象直接传递给使用数据库的任何类。

    您可以像这样将超时传递给构造函数:

    public class MyDbContext: DbContext
    {
       private const int Timeout = 180;
    
       public MyDbContext(DbContextOptions options): base(options)
       {
           this.Database.SetCommandTimeout(Timeout);
       }
    }
    
      "DbContextSettings": {
        "Timeout": "180"
      }
    
    services.AddTransient<SomeRepository>();
    
    public MyDbContext(DbContextOptions options, int timeout): base(options)
       {
           Timeout = timeout;
           this.Database.SetCommandTimeout(Timeout);
       }
    
    下面是一个如何从App settings.json读取设置的示例

    编辑

    public MyDbContext(DbContextOptions options): base(options)
       {
           int timeout = //return timeout setting from appsettings.json
           this.Database.SetCommandTimeout(Timeout);
       }
    

    您可以尝试这样做,即在构造函数中读取appsettings.json。

    但是如何将超时传递给构造函数?我从不初始化MyDbContext,请参阅我的编辑也许您可以在使用AddDb方法之前初始化它。在我的sql数据库上的每个请求中都会调用构造函数,因此设置一次值可能不会像“MyDbContext dbcontext=new MyDbContext(paramater);”那样工作正如我所说,在数据库中的每个sql语句中,类的构造函数都会被称为entityframework本身。我不能自己调用构造函数。即使我愿意,我也必须在每次数据库调用中使用它,这就像3000行代码,我甚至不确定它是否能工作