问题
I'm using the DbMigrator
class to get a list of pending migrations. For some reason it returns no items even though there are pending migrations. Am i missing a step?
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());
I thought it might be the connection string but what's interesting is that migrator.GetDatabaseMigrations()
returns the correct list of migrations already applied to the db.
回答1:
The same happened to me and the reason was that I was working in a different assembly. In that case, you need to specify the assembly and namespace that contains your migrations:
config.MigrationsAssembly = Assembly.GetAssembly(typeof([One of your migration classes]));
config.MigrationsNamespace = "[Namespace containing your migrations]";
回答2:
I have same problem too, and after a week of research and read .Net source finally find solution. If you working in a different assembly, you mus set configuration assembly information completely like this:
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();
}
This code is in DbContextBase
class, All DbContext
in my project inherit DbContextBase
. DbContextBase
is abstract and it is located in another assembly. When called UpdateDatabaseToLatestVersion
from each DbContext, var type = GetType();
return inherited DbContext type.
来源:https://stackoverflow.com/questions/12353149/dbmigrator-getpendingmigrations-always-empty