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
中获取值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行代码,我甚至不确定它是否能工作