实体框架代码优先:迁移仅在运行时知道的数据库

jmp*_*pcm 5 c# asp.net asp.net-mvc entity-framework

我正在尝试迁移仅在运行时已知的数据库,这意味着我无法使用程序包管理器控制台来更新数据库.它也不只是一个,而是许多数据库,但它们都是相同的架构:)

我正在使用Ninject生成并在DbContext对象上注入连接字符串.上下文构造函数看起来像这样:

public class MyEntities : DbContext
{
    public MyEntities(string database) : base(database) { }
    /* Properties code omitted. */
}
Run Code Online (Sandbox Code Playgroud)

实例化上下文的方法如下:

public MyEntities GetDatabase(string databaseName, string connectionString)
{
    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);
    builder.InitialCatalog = databaseName;

    MyEntities context = this._kernel.Get<MyEntities>(new ConstructorArgument(
        "database", builder.ConnectionString));

    Database.SetInitializer<MyEntities>(
        new MigrateDatabaseToLatestVersion<MyEntities, MyEntitiesMigrationConfiguration>("MyEntities"));

    return context;
}
Run Code Online (Sandbox Code Playgroud)

检索上下文时,该方法创建一个连接字符串,并将其作为参数传递给构造函数MyEntities.我还在方法中指定了我想要的迁移类型(在本例中MigrateDatabaseToLatestVersion).

迁移代码如下:

public partial class MyAccountInMonth : DbMigration
{
    public override void Up()
    {
        AlterColumn("AccountsInMonths", "MovementDebtMonth", c => c.Long(nullable: false));
        AlterColumn("AccountsInMonths", "MovementCreditMonth", c => c.Long(nullable: false));
        AlterColumn("AccountsInMonths", "BalanceMonth", c => c.Long(nullable: false));
        AlterColumn("AccountsInMonths", "MovementDebtAccumulated", c => c.Long(nullable: false));
        AlterColumn("AccountsInMonths", "MovementCreditAccumulated", c => c.Long(nullable: false));
        AlterColumn("AccountsInMonths", "BalanceAccumulated", c => c.Long(nullable: false));
    }

    public override void Down() { /* Code omitted */ }
}
Run Code Online (Sandbox Code Playgroud)

当我运行该应用程序时,会发生以下错误:

Cannot find the object "AccountsInMonths" because it does not exist or you do not have permissions.
Run Code Online (Sandbox Code Playgroud)

什么是移民所做的是改变列的类型AccountsInMonths,从intlong.

这是一个迁移错误,因为堆栈跟踪已调用它.此时我只能认为问题可以是权限,因为表存在.其他可能性是连接字符串上的某种问题.拜托,有人知道这个吗?提前致谢!

PS:如果不清楚我可以在问题中添加更多信息.

Pet*_*old 2

若要将数据库迁移到 Visual Studio 和包管理器控制台之外,请使用位于 EntityFramework nuget 包中的随附migrate.exe工具。它基本上可以让您从命令行进行相同的迁移。