Entity framework 如何在ASP.NET Core 2.0中将选项从Startup.cs传递到DbContextOptions构造函数函数
我正在使用ASP.NET Core 2.0 在Startup.cs我有Entity framework 如何在ASP.NET Core 2.0中将选项从Startup.cs传递到DbContextOptions构造函数函数,entity-framework,asp.net-core,Entity Framework,Asp.net Core,我正在使用ASP.NET Core 2.0 在Startup.cs我有 services.AddDbContext<MailDBServicesContext>(optionsSqLite => { optionsSqLite.UseSqlite("Data Source=Mail.db"); }); 例如,只需将maildbservicecontext注入控制器或服务类就足够了 public class SomeDat
services.AddDbContext<MailDBServicesContext>(optionsSqLite =>
{
optionsSqLite.UseSqlite("Data Source=Mail.db");
});
例如,只需将
maildbservicecontext
注入控制器或服务类就足够了
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上的中定义
更新
确保在DI中注册您的服务,即ConfigureServices
方法
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<ISomeDataService, SomeDataService>();
services.AddDbContext<MailDBServicesContext>(optionsSqLite =>
{
optionsSqLite.UseSqlite("Data Source=Mail.db");
});
services.AddMvc();
}
现在,每次加载主页时,都会在DbSetMailCountSentErrorMails
表中插入一条记录
您可以在my.上找到有效的解决方案。您不必
新建它。让DI为您在类中注入它。抱歉,Shyju,我找不到您如何共享一些代码。我收到错误:{System.NullReferenceException:Object reference未设置为对象的实例。在TestApp.MyServices.MailClass.d__1.MoveNext()尝试调用时:\ dbContext.DbSetMailCountSentErrorMails.Add(new-MailCountSentErrorMails(){countSentMails=55});我已经更新了我的答案,并在我的GitHub上添加了一个示例。这有帮助吗?非常感谢您的帮助,现在它正在工作!@AG70您应该单击上下投票按钮下的复选标记,将Ignas的答案标记为问题的答案。
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();
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<ISomeDataService, SomeDataService>();
services.AddDbContext<MailDBServicesContext>(optionsSqLite =>
{
optionsSqLite.UseSqlite("Data Source=Mail.db");
});
services.AddMvc();
}
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();
}
}