Entity Framework代码优先 - 初始代码迁移未成功

3

我正在尝试通过代码运行迁移。 我创建了我的模型并启用了迁移,然后添加了初始迁移,该初始迁移包含所有创建表等内容。

public partial class Initial : DbMigration
 {
     public override void Up()
     {
        CreateTable(..........
     }

 public override void Down()
    {
           DropTable(...........
     }
}

我随后尝试使用Visual Studio中的Update-Database命令,这个命令能够良好地工作,创建数据库并运行初始迁移。
然后我在Sql Studio中删除了数据库。接着我运行了调用Migration Manager类的控制台应用程序。
// MigrationManager class

    public static bool PerformMigration(string migrationId)
    {
        bool success = false;
        try
        {
            DbMigrationsConfiguration<MyDbContext> config = new Configuration();
    ....
            DbMigrator migrator = new DbMigrator(config);
            migrator.Configuration.AutomaticMigrationsEnabled = false;
            if (string.IsNullOrEmpty(migrationId))                    
                migrator.Update(); --> fails saying pending migration
            else
                migrator.Update(migrationId);

            success = true;
        }
        catch (Exception e)
        {
            success = false;
            LastException = e.Message;
        }

        return success;
    }

Update()操作失败,显示以下错误信息:

无法更新数据库以匹配当前模型,因为存在未处理的更改并且禁用了自动迁移。请将未处理的模型更改写入基于代码的迁移,或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。

//Configuration.cs
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }

    protected override void Seed(WorkflowConfigurationDbContext context)
    {
        SeedData(context);
    } 
    private void SeedData(){...}    

}

public class MyDbContext : DbContext
{
    public MyDbContext()
    {            
    }        

    public DbSet....

    }

当我经过Update()调用时,它进入Configuration()构造函数和MyDbContext()构造函数,但在那之后失败了,似乎根本没有尝试进行初始迁移。
2个回答

0

请确保在您的EF上下文构造函数中正确设置数据库初始化策略,例如:

 public partial class YourContext: DbContext
 {
     static YourContext()
     {
         Database.SetInitializer<YourContext>(new CreateDatabaseIfNotExists<YourContext>());
     }
 }

这是在第一次访问数据库时执行的。

编辑:第二个问题可能与安全有关:执行迁移的用户是否具有所需的权限?


谢谢您的回复,我已经尝试过了,但没有成功 :( - wk4questions
编辑我的答案:安全性如何? - L-Four

0

找到了问题,它是错误的命名空间。

DbMigrationsConfiguration<MyDbContext> config = new Configuration();
config.MigrationsNamespace = "Correct Namespace";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接