Допустим, у нас есть модель архитектуры веб-приложения, где у нас есть 1 база данных на 1 учетную запись. Структура базы данных для этих учетных записей одинакова и отличается только данными с помощью. Как настроить миграцию в первой модели кода.Первичная миграция кода сущностей в несколько баз данных
ответ
Теперь у меня есть следующее решение. В основном методе или в global.asax что-то вроде этого:
var migration_config = new Configuration();
migration_config.TargetDatabase = new DbConnectionInfo("BlogContext");
var migrator = new DbMigrator(migration_config);
migrator.Update();
migration_config.TargetDatabase = new DbConnectionInfo("BlogContextCopy");
migrator = new DbMigrator(migration_config);
migrator.Update();
соединения строк, например, в app_config файле:
<connectionStrings>
<add name="BlogContext" providerName="System.Data.SqlClient" connectionString="Server=(localdb)\v11.0;Database=MigrationsDemo.BlogContext;Integrated Security=True;"/>
<add name="BlogContextCopy" providerName="System.Data.SqlClient" connectionString="Server=(localdb)\v11.0;Database=MigrationsDemo.BlogContextCopy;Integrated Security=True;"/>
</connectionStrings>
класса конфигурации и контекст:
internal sealed class Configuration : DbMigrationsConfiguration<MigrationsDemo.BlogContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
protected override void Seed(MigrationsDemo.BlogContext context) {
}
}
public class BlogContext : DbContext {
public BlogContext() {}
public BlogContext(string connection_name) : base(connection_name) {
}
public DbSet<Blog> Blogs { get; set; }
}
См. the page on automatic migrations during application startup.
Если вы используете этот метод для применения ваших миграций, вы можете использовать любую строку соединения (или любой другой метод, с помощью которого вы должны точно определить, к какой базе данных подключиться) и при подключении, миграция будет выполнена.
Как сообщить инструменту миграции список баз данных, которые мне нужно обновить? Можете привести пример? – Vitach
Если я буду вводить около 50 или 100 баз данных в строку строк подключения, как инструмент миграции будет знать, какой из них необходим для миграции? – Vitach
Database.SetInitializer (новый MigrateDatabaseToLatestVersion
В дополнение к вашему прекрасному ответу, вы можете использовать внешний файл конфигурации (то есть «clients.json») вместо их жесткого кодирования, поместить всю информацию о базе данных в пары ключ-значение в json f ile и загрузить его во время запуска.
Затем, итерации по парам ключ-значение, вы можете выполнить инициализацию.
clients.json
:
{
"DatabaseA": "DatabaseAConnectionString",
"DatabaseB": "DatabaseBConnectionString",
"DatabaseC": "DatabaseCConnectionString",
...
}
Обеспечить метод для обработки миграции:
public static void MigrateDatabases(IDictionary<string,string> databaseConfigs)
{
foreach (var db in databaseConfigs)
{
var config = new Configuration
{
TargetDatabase = new DbConnectionInfo(db.Value, "System.Data.SqlClient")
};
var migrator = new DbMigrator(config);
migrator.Update();
}
}
Тогда при запуске (я использую Owin, так что в моем Startup.cs
, также может быть global.asax.cs
):
string json;
var path = HttpRuntime.AppDomainAppPath;
using (var reader = new StreamReader(path + @"Config\clients.json"))
{
json = reader.ReadToEnd();
}
var databases = JsonConvert.DeserializeObject<IDictionary<string, string>>(json);
MigrateDatabases(databases);
Работает как очарование для м e :)
У вас разные ветви разветвления для разных учетных записей? –
Нет, для них есть только одна ветвь релиза. – Vitach