using FluentMigrator; namespace Migrations.Default { [Migration(1, "Author: AuthorName; Description")] public class Migration_1: Migration { public override void Up() { // Migration Up code here } public override void Down() { // Migration Down code here } } }
Create.Table("Users") .WithIdColumn() .WithColumn("Name").AsString().NotNullable();
Execute.Sql("DELETE TABLE Users");
<?xml version="1.0" encoding="utf-8" ?> <configuration> <MigrationNamespaces> <MigrationNamespace Name="Default" Path="Migrations.Default"/> <MigrationNamespace Name="My Second Database" Path="Migrations.MySecondDatabase"/> </MigrationNamespaces> </configuration>
public Action<string> OnNewUpdateLog; public void UpdateToLatestVersion(string databaseName, string migrationNamespace) { // , FluentMigrator-a var announcer = new TextWriterAnnouncer(OnNewUpdateLog); // var assembly = Assembly.GetExecutingAssembly(); // , var migrationContext = new RunnerContext(announcer) { Namespace = migrationNamespace }; var options = new MigrationOptions { PreviewOnly = false, Timeout = 60 }; // SqlServer2008 var factory = new FluentMigrator.Runner.Processors.SqlServer.SqlServer2008ProcessorFactory(); var processor = factory.Create(GetConnectionString(databaseName), announcer, options); // runner var runner = new MigrationRunner(assembly, migrationContext, processor); // runner.MigrateUp(true); OnNewUpdateLog("Done"); }
public void BackupDatabase(string databaseName, string destinationPath) { var sqlServer = new Server(_connection); databaseName = databaseName.Replace("[", "").Replace("]", ""); var sqlBackup = new Backup { Action = BackupActionType.Database, BackupSetDescription = "ArchiveDataBase:" + DateTime.Now.ToShortDateString(), BackupSetName = "Archive", Database = databaseName }; var deviceItem = new BackupDeviceItem(destinationPath, DeviceType.File); sqlBackup.Initialize = true; sqlBackup.Checksum = true; sqlBackup.ContinueAfterError = true; sqlBackup.Devices.Add(deviceItem); sqlBackup.Incremental = false; sqlBackup.ExpirationDate = DateTime.Now.AddDays(3); sqlBackup.LogTruncation = BackupTruncateLogType.Truncate; sqlBackup.PercentCompleteNotification = 10; sqlBackup.PercentComplete += (sender, e) => OnSqlBackupPercentComplete(e.Percent, e.Message); sqlBackup.Complete += (sender, e) => OnSqlBackupComplete(e.Error); sqlBackup.FormatMedia = false; sqlBackup.SqlBackup(sqlServer); } public void RestoreDatabase(string databaseName, string filePath) { var sqlServer = new Server(_connection); databaseName = databaseName.Replace("[", "").Replace("]", ""); var sqlRestore = new Restore(); sqlRestore.PercentCompleteNotification = 10; sqlRestore.PercentComplete += (sender, e) => OnSqlRestorePercentComplete(e.Percent, e.Message); sqlRestore.Complete += (sender, e) => OnSqlRestoreComplete(e.Error); var deviceItem = new BackupDeviceItem(filePath, DeviceType.File); sqlRestore.Devices.Add(deviceItem); sqlRestore.Database = databaseName; DataTable dtFileList = sqlRestore.ReadFileList(sqlServer); int lastIndexOf = dtFileList.Rows[1][1].ToString().LastIndexOf(@"\"); string physicalName = dtFileList.Rows[1][1].ToString().Substring(0, lastIndexOf + 1); string dbLogicalName = dtFileList.Rows[0][0].ToString(); if (!Directory.Exists(physicalName)) { physicalName = sqlServer.MasterDBPath + "\\"; } string dbPhysicalName = physicalName + databaseName + ".mdf"; string logLogicalName = dtFileList.Rows[1][0].ToString(); string logPhysicalName = physicalName + databaseName + "_log.ldf"; sqlRestore.RelocateFiles.Add(new RelocateFile(dbLogicalName, dbPhysicalName)); sqlRestore.RelocateFiles.Add(new RelocateFile(logLogicalName, logPhysicalName)); sqlServer.KillAllProcesses(sqlRestore.Database); Database db = sqlServer.Databases[databaseName]; if (db != null) { db.DatabaseOptions.UserAccess = DatabaseUserAccess.Single; db.Alter(TerminationClause.RollbackTransactionsImmediately); sqlServer.DetachDatabase(sqlRestore.Database, false); } sqlRestore.Action = RestoreActionType.Database; sqlRestore.ReplaceDatabase = true; sqlRestore.SqlRestore(sqlServer); db = sqlServer.Databases[databaseName]; db.SetOnline(); sqlServer.Refresh(); db.DatabaseOptions.UserAccess = DatabaseUserAccess.Multiple; }
Source: https://habr.com/ru/post/219789/