我正在使用ASP.NET Core 2.0
在Startup.cs我有
services.AddDbContext<MailDBServicesContext>(optionsSqLite =>
{
optionsSqLite.UseSqlite("Data Source=Mail.db");
});
我创建了一个模型和一个DbContext,其中DbContext是:
public class MailDBServicesContext : DbContext
{
public MailDBServicesContext(DbContextOptions<MailDBServicesContext> options)
: base(options)
{
}
public DbSet<MailCountSentErrorMails> DbSetMailCountSentErrorMails { get; set; }
}
从类助手我需要传递DbContextOptions,我的问题是如何判断使用Startup.cs ConfigureServices方法中的选项
using (var db = new MailDBServicesContext())
{
}
答案 0 :(得分:3)
例如,只需将MailDBServicesContext
注入您的控制器或服务类就足够了。
public class SomeDataService
{
private readonly MailDBServicesContext _dbContext;
public SomeDataService(MailDBServicesContext dbContext)
{
_dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
}
public async Task AddMailCounts()
{
_dbContext.DbSetMailCountSentErrorMails
.Add(new MailCountSentErrorMails { CountSentMails = 55 });
await _dbContext.SaveChangesAsync();
}
}
其他数据库上下文配置选项在MSDN上的Configuring a DbContext中定义。
<强>更新强>
确保在DI中注册您的服务,即ConfigureServices
方法。
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<ISomeDataService, SomeDataService>();
services.AddDbContext<MailDBServicesContext>(optionsSqLite =>
{
optionsSqLite.UseSqlite("Data Source=Mail.db");
});
services.AddMvc();
}
然后拨打控制器中的AddMailCounts()
。
public class HomeController : Controller
{
private readonly ISomeDataService _dataService;
public HomeController(ISomeDataService dataService)
{
_dataService = dataService ?? throw new ArgumentNullException(nameof(dataService));
}
public IActionResult Index()
{
_dataService.AddMailCounts();
return View();
}
}
现在每次加载主页时,都会在DbSetMailCountSentErrorMails
表中插入一条记录。
您可以在GitHub找到有效的解决方案。