6

クラスを使用してDbMigrator、保留中の移行のリストを取得しています。何らかの理由で、保留中の移行があるにもかかわらず、アイテムが返されません。私はステップを逃していますか?

var configuration = new Migrations.Configuration();
configuration.TargetDatabase = new DbConnectionInfo("MyDatabase");

var migrator = new DbMigrator(configuration);
var migs = migrator.GetPendingMigrations().ToList();
Console.WriteLine(migrator.GetPendingMigrations().ToString());

接続文字列かもしれないと思いましたが、興味深いのはmigrator.GetDatabaseMigrations()、データベースに既に適用されている移行の正しいリストを返すことです。

4

3 に答える 3

4

同じことが私にも起こりました。その理由は、私が別のアセンブリで働いていたからです。その場合、移行を含むアセンブリと名前空間を指定する必要があります。

config.MigrationsAssembly = Assembly.GetAssembly(typeof([One of your migration classes]));
config.MigrationsNamespace = "[Namespace containing your migrations]";
于 2014-06-23T00:33:40.557 に答える
4

私も同じ問題を抱えており、1週間の調査と.Netソースの読み取りの後、最終的に解決策を見つけました。別のアセンブリで作業している場合は、構成アセンブリ情報を次のように完全に設定する必要があります。

    public void UpdateDatabaseToLatestVersion()
    {
        var configuration = new DbMigrationsConfiguration();
        var type = GetType();

        configuration.MigrationsAssembly = type.Assembly;
        configuration.TargetDatabase = new DbConnectionInfo(connectionString, "System.Data.SqlClient");
        configuration.MigrationsNamespace = type.Namespace + ".Migrations";
        configuration.ContextKey = type.Namespace + ".Migrations.Configuration";
        configuration.ContextType = type;
        var migrator = new DbMigrator(configuration);

        migrator.Update();
     }

このコードはDbContextBaseクラスDbContext内にあり、プロジェクト内のすべては継承しDbContextBaseます。DbContextBase抽象的で、別のアセンブリにあります。UpdateDatabaseToLatestVersion各 DbContext から呼び出されると、var type = GetType();継承された DbContext 型を返します。

于 2016-03-29T14:00:05.867 に答える