[英]Pass parameter to class which inherits from DbContext
我的应用程序是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
则此方法有效。
但是,我想在我的appsettings.json
文件中包含Timeout
的值,如下所示:
"DbContextSettings": {
"Timeout": "180"
}
因此,有两种方法可以立即设置CommandTimeout
:
CommandTimeOutInSeconds
作为参数传递给构造函数。 appsettings.json
获取值 我不知道如何实现其中一种方法。
这可能吗? 还是有任何已知的解决方法?
编辑
我从来没有真正Initailizing 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
类。 我在startup
通过dependency injection
来做到这一点,如下所示:
services.AddTransient<SomeRepository>();
该类从上面显示的行知道MyDbContext
:
services.AddDbContext<MyDbContext>(db => db.UseSqlServer("secret"));
因此,我永远不会将MyDbContext
的对象直接传递MyDbContext
数据库一起使用的任何类。
您可以将超时传递给您的构造函数,如下所示:
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.