Выполнить миграцию FluentMigrator из кода [закрыто]
Существуют ли учебники или примеры кода для выполнения FluentMigrator миграции из кода? Некоторые "Приступают К Работе..."учебник был бы просто потрясающим. Все, что мне удалось найти, это FluentMigrator.Тесты (юнит-тесты), находящиеся внутри источника FluentMigrator, которые не так полезны, как "начало работы..." должен быть.
Я просто хочу добавить несколько классов в проект и запустить миграции из этого проекта без каких-либо внешних инструментов. Возможно ли это в Fluent Migrator? Что-то вроде
FluentMigrator.Migrate("database path", typeof(Migration024));
Который я бы назвал из Program.Main()?
5 ответов:
Поскольку fluent migrator является развилкой Migrator .NET, вы можете найти начало работы для Migrator .net полезным
Один из оригинальных авторов FluentMigrator только что написал этот блог "начало работы" .
Я списал это из их исходного кода...
using (IAnnouncer announcer = new TextWriterAnnouncer(Console.Out)) { IRunnerContext migrationContext = new RunnerContext(announcer) { Connection = "Data Source=test.db;Version=3", Database = "sqlite", Target = "migrations" }; TaskExecutor executor = new TaskExecutor(migrationContext); executor.Execute(); }Я использую код, подобный этому, в пользовательском классе действий в WiX. Target-это имя сборки, которую вы хотите выполнить. В вашем случае это будет любая сборка, созданная вашим проектом миграции. В IRunnerContext можно задать и другие параметры. Например, пространство имен, PreviewOnly и т. д. К сожалению, это не задокументировано, поэтому вам придется копаться в коде, чтобы понять это. Проект, который генерирует миграцию.exe ассамблея-вот где я нашел большую часть этого.
Вот пример того, как это делается в C# (а не в MSBuild, Nant или Console runner), основанный на обрывках Stackoverflow:
static void Main(string[] args) { string connectionString = @"server=.\SQLEXPRESS;database=testdb;uid=sa2;pwd=Passw0rd"; Announcer announcer = new TextWriterAnnouncer(s => System.Diagnostics.Debug.WriteLine(s)); announcer.ShowSql = true; Assembly assembly = Assembly.GetExecutingAssembly(); IRunnerContext migrationContext = new RunnerContext(announcer); var options = new ProcessorOptions { PreviewOnly = false, // set to true to see the SQL Timeout = 60 }; var factory = new SqlServer2008ProcessorFactory(); using (IMigrationProcessor processor = factory.Create(connectionString, announcer, options)) { var runner = new MigrationRunner(assembly, migrationContext, processor); runner.MigrateUp(true); // Or go back down //runner.MigrateDown(0); } } [Migration(1)] public class CreateUserTable : Migration { public override void Up() { Create.Table("person") .WithColumn("Id").AsGuid().PrimaryKey() .WithColumn("Name").AsString(); } public override void Down() { Delete.Table("person"); } }Вам будет трудно сделать это в C# с
TaskExecutor, поскольку этот класс предназначен исключительно для консольного приложения (migrate.исполняемый).
Этот учебник был полезен для меня, чтобы выяснить, как построить и использовать FluentMigrator с MSBuild, если вы используете visual studios.
Также поставляется с примером резервного копирования и восстановления базы данных.
Comments