2017-10-21 94 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