在创建DbContext时,您应该指定connStr,即在我通过自己的DbContext扩展创建的NET Core中:
public static class ServiceCollectionExtensions
{
public static IServiceCollection ConfigureSqlServerDbContext<TContext>(this IServiceCollection serviceCollection, string connectionString)
where TContext: DbContext
{
serviceCollection.AddDbContext<TContext>(options => options.UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll)
.UseSqlServer(connectionString)
.UseLazyLoadingProxies());
return serviceCollection;
}
}
我在应用程序启动时运行迁移(在我的示例中,我将appsettings.json用于读取配置部分,FeesCalculationModelContext是我的数据库上下文):
IList<IConfigurationSection> connections = _configuration.GetSection(ConnectionStringsSectionKey).GetChildren().ToList();
string feesCalculationConnectionString = connections.First(item => string.Equals(item.Key.ToLower(), FeesCalculationConnectionStringKey.ToLower())).Value;
FeesCalculationConnectionString = feesCalculationConnectionString;
// 2. Configure context's
services.AddEntityFrameworkSqlServer();
// 2. b. Fees calc
services.ConfigureSqlServerDbContext<FeesCalculationModelContext>(feesCalculationConnectionString);
// migrate fees calculation ...
IServiceProvider serviceProvider = services.BuildServiceProvider();
FeesCalculationModelContext feesCalculationDbService = serviceProvider.GetService<FeesCalculationModelContext>();
feesCalculationDbService.Database.Migrate();
如果要指定db并用命令更新它,则应具有设计时db上下文工厂:
internal class FeesCalcMigrationsDbContextFactory : IDesignTimeDbContextFactory<FeesCalculationModelContext>
{
public FeesCalculationModelContext CreateDbContext(string[] args)
{
//todo: umv: move hardcoded conn string to migrationsSettings.json
string startupPath = Path.Combine(Environment.CurrentDirectory, @"..\B2b.Data");
string migrationsConfigFile = Path.Combine(startupPath, "migrations.Development.settings.json");
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder().AddJsonFile(migrationsConfigFile, false, false);
IConfigurationRoot configration = configurationBuilder.Build();
string connectionString = configration.GetConnectionString("FeesCalculationConnectionString");
DbContextOptionsBuilder<FeesCalculationModelContext> optionsBuilder = new DbContextOptionsBuilder<FeesCalculationModelContext>();
optionsBuilder.UseSqlServer(connectionString);
return new FeesCalculationModelContext(optionsBuilder.Options);
}
}
对于添加迁移和数据库更新,应使用以下命令(NuGet Console,选择包含DbContext的项目):
添加迁移{name}-Context FeesCalculationModelContext-OutputDir FeesCalculation\Migrations
更新数据库-上下文FeesCalculationModelContext