我的申请是ASP.NET Core 1.0 Web API
。我正在使用Entity framework
。
我不想像这样改变CommandTimeout
:
public class MyDbContext: DbContext
{
private const int Timeout = 180;
public MyDbContext(DbContextOptions options): base(options)
{
this.Database.SetCommandTimeout(Timeout);
}
}
如果在我的课程中定义了Timeout
,这是有效的。
但是,我想在我的Timeout
文件中包含我的appsettings.json
的值,如下所示:
"DbContextSettings": {
"Timeout": "180"
}
所以有两种方法可以立即设置CommandTimeout
:
CommandTimeOutInSeconds
作为参数传递给构造函数。appsettings.json
的值
醇>
我不知道如何实现其中一种方式。
这可能吗?或者有任何已知的解决方法吗?
修改
我从未真正宣传MyDbContext
。我在ConfigureServices
类的Startup
中执行此操作,如下所示:
services.AddDbContext<MyDbContext>(db => db.UseSqlServer("secret"));
修改2
@dennisanberlin所以让我说我有一个控制器调用以下方法:
public class SomeRepository
{
private MyDbContext context;
public SomeRepository(MyDbContext myContext)
{
this.context = myContext;
}
public Person SomeMethodCalledByController(){
return myContext.SomeTableWhichContainsPersons.FirstOrDefault(person => person.name == "Bob");
}
}
班级SomeRepository
永远不会被我初始化。我通过dependency injection
中的startup
这样做:
services.AddTransient<SomeRepository>();
班级从上面显示的行中了解MyDbContext
:
services.AddDbContext<MyDbContext>(db => db.UseSqlServer("secret"));
因此,我永远不会将MyDbContext
的对象直接传递给使用数据库的任何类。
答案 0 :(得分:2)
您可以将超时传递给构造函数,如下所示:
public MyDbContext(DbContextOptions options, int timeout): base(options)
{
Timeout = timeout;
this.Database.SetCommandTimeout(Timeout);
}
以下是有关如何从App settings.json csharpcorner
中读取设置的示例修改强>
public MyDbContext(DbContextOptions options): base(options)
{
int timeout = //return timeout setting from appsettings.json
this.Database.SetCommandTimeout(Timeout);
}
您可以尝试这样做,即在构造函数中读取appsettings.json。