2017-10-21 65 views
2

我使用ASP.NET 2.0的核心如何从Startup.cs在ASP.NET核2.0

选项传递给DbContextOptions构造函数在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

你不'新'它。让DI在你的班级为你注入它。 – Shyju

+0

对不起Shyju,我不知道你怎么能请分享一些代码? – AG70

回答

2

例如,只需将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中定义了其他DB上下文配置选项。

更新

确保在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上找到工作解决方案。

+0

我收到错误: {System.NullReferenceException:对象引用未设置为对象的实例。在TestApp.MyServices.MailClass。 d__1.MoveNext() 试图调用时: _dbContext.DbSetMailCountSentErrorMails.Add(new MailCountSentErrorMails(){countSentMails = 55}); – AG70

+0

我已经更新了我的答案,并在我的GitHub上添加了一个示例。这有帮助吗? – Ignas

+0

非常感谢您的帮助,现在它正在工作! – AG70