2

データベースを最新の状態に保つために Fluent Migrator を使用しています。アップとダウン機能は完璧に機能します。次のステップは、ビューを作成することです。これらは、私が持っている.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 クラスが Migration クラスの機能を実行できるようにしたいと考えExecute.Sql(ています。

4

1 に答える 1

0

ソースコードをダウンロードして理解しました。

メンテナンスを実行したい: Migrationクラスでは、移行の場合と同じように、クラスから継承する必要があります(当然..)。その後、移行でアクセスできるすべてのものにアクセスできますExecute.Sql(

継承元の場合、Fluent Migrator の Reflection はそれを検索して見つけ、設定されている属性を使用して、すべての移行が実行された後にそれを実行します。

この部分は必要ありません:

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

きちんとした :)

于 2014-10-16T15:28:59.420 に答える