【发布时间】:2017-06-08 16:56:13
【问题描述】:
我的申请是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。我在Startup 类中的ConfigureServices 中这样做:
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 的对象直接传递给我的任何使用数据库的类。
【问题讨论】:
标签: c# entity-framework asp.net-core