2

我正在使用 Fluent Migrator 来保持数据库更新。Up 和 Down 功能完美运行。下一步是我想要创建视图。这些我想从我拥有的 .SQL 文件中运行。我希望每次都运行完所有迁移后运行它。

我目前拥有的是:

var blah = new MigrationConventions();
var maintenanceLoader = new MaintenanceLoader(_migrate, blah);
maintenanceLoader.ApplyMaintenance(MigrationStage.AfterAll);

和一堂课

[Maintenance(MigrationStage.AfterAll)]
public class ViewMaintenance
{
    public ViewMaintenance() {
        var blah = 123;
    }
}

这不会被触发,因为在 maintenanceLoader 中它可以找到 0 个元素。我正在插入 _migrate,它的定义如下:

var runnerContext = new RunnerContext(new TextWriterAnnouncer(UpdateText));
_migrate = new MigrationRunner(
 Assembly.GetExecutingAssembly(), 
 runnerContext,
  new SqlServerProcessor(
  new SqlConnection(connectionString), 
  new SqlServer2012Generator(), 
  new TextWriterAnnouncer(UpdateText), 
  new ProcessorOptions(), 
  new SqlServerDbFactory()));

为什么Assembly.GetExecutingAssembly()扫描不到,[Maintenance(MigrationStage.AfterAll)]找不到呢?

我还希望 ViewMaintenance 类能够运行Execute.Sql(Migration 类所具有的。

4

1 回答 1

0

我下载了源代码并弄清楚了。

在我希望运行维护的类中,我需要从: Migration类继承,就像迁移(duh ..)一样。然后它将可以访问它在迁移中可以访问的所有内容,包括Execute.Sql(.

当它被继承时,Fluent Migrator 中的反射将搜索它,找到它,并在运行所有迁移后使用设置的属性运行它。

这部分不需要:

var blah = new MigrationConventions();
var maintenanceLoader = new MaintenanceLoader(_migrate, blah);
maintenanceLoader.ApplyMaintenance(MigrationStage.AfterAll);

整洁的 :)

于 2014-10-16T15:28:59.420 回答