Мое приложение - 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
внутри конструктора моего класса
Я не знаю, как достичь одного из способов.
Возможно ли это? или существует ли какое-либо известное обходное решение?
Edit
Я никогда не инициализирую 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
напрямую ни одному из моих классов, работающих с базой данных.