Вы должны указать connStr при создании DbContext, то есть в NET Я создаю ядро с помощью собственного расширения DbContext:
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();
, если вы хотите указать базу данных и обновить ее с помощью команды, у вас должна быть фабрика контекста базы данных времени разработки:
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):
Add-Migration {name} -Context FeesCalculationModelContext -OutputDir FeesCalculation \ Migrations
Update-Database -Context FeesCalculationModelContext