我想在開發環境中運行SQLite數據庫,並在生產環境中運行SQLServer Express數據庫。在dotnet core 2的不同環境中運行不同的數據庫類型
我們首先使用代碼進行數據庫遷移。
如何在每個環境中注入不同的dbcontext?
如何針對特定數據庫運行遷移。例如。在開發過程中,我想要針對SQLite數據庫運行遷移。
我想在開發環境中運行SQLite數據庫,並在生產環境中運行SQLServer Express數據庫。在dotnet core 2的不同環境中運行不同的數據庫類型
我們首先使用代碼進行數據庫遷移。
如何在每個環境中注入不同的dbcontext?
如何針對特定數據庫運行遷移。例如。在開發過程中,我想要針對SQLite數據庫運行遷移。
所以我想我找到了一個很好的方法讓你做到這一點。您可以使用ConfigureDevelopmentServices啓動約定來添加您的SQLSite DbContext。因此,正如一些基本的例子,你會:
// Production "like" ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
// Use Sql Server
services.AddDbContext<SchoolContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("ProductionConnection")));
}
// Development ConfigureServices
public void ConfigureDevelopmentServices(IServiceCollection services)
{
// Use SQL Lite
services.AddDbContext<SchoolContext>(options =>
options.UseSqlite(Configuration.GetConnectionString("DevelopmentConnection")));
}
你甚至可以走得更遠,如果你碰巧有隻上演另一個不同的上下文中添加ConfigureStagingServices。爲了避免複製和粘貼公共服務,你可以有一個私有方法來註冊公共服務,並且只有特定的東西纔有獨立的方法。
現在對於遷移,我從來沒有測試過,但我最好的猜測是如果你有正確的dbContext和正確的連接字符串,遷移將正常工作。您只需指向EF項目並運行它。
太好了。不知道「Configure
很高興幫助。是的..遷移總是很痛苦..很高興現在使用noSQl分貝:)。 – jpgrassi
首先,你如何注入你的dbcontext?我假設你使用某種DI容器。您可以使用IHostingEnvironment並相應地注入適當的dbContext。要運行遷移,您需要指向一個項目並運行它。 「魔術」是遷移將使用的連接字符串。您可以使用相同的接口並在運行時獲取正確的接口。這只是想法..沒有實現這個自己,但我想這是一個開始。 – jpgrassi
甚至更好:您可以有多個以您的環境爲目標的appsettings。所以:一個appsettings.Development.json和appsettings.Production.json。他們每個人都將有各自的連接字符串。然後,您只需使用來自appsettings的連接字符串配置您的dbContext,您將始終擁有這些連接字符串。 – jpgrassi
@jpgrassi這就是我們目前所做的。但我想我需要一個不同的方法來添加一個sqlite db vs sqlserver。目前我們運行'services.AddDbContext(options => options.UseSqlServer(this.Configuration.GetConnectionString(「DBConnection」)));'但是要使用sqlite db,我認爲你需要調用'options.UseSqlite'。 –