Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 如何在ASP.NET Core 2.0中将选项从Startup.cs传递到DbContextOptions构造函数函数_Entity Framework_Asp.net Core - Fatal编程技术网

Entity framework 如何在ASP.NET Core 2.0中将选项从Startup.cs传递到DbContextOptions构造函数函数

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

我正在使用ASP.NET Core 2.0

在Startup.cs我有

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();
    }
}