我想在开发环境中运行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'。 –