3

我试图从代码运行迁移。我创造了我的模特和启用的迁移,然后添加初始迁移,这个初始迁移包含所有创建表等
实体框架代码优先 - 初始代码迁移不起作用

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

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

然后我试图从Visual Studio工作正常更新,数据库命令,创建数据库并运行初始迁移。

然后我从Sql Studio中删除数据库。然后我运行调用迁移管理器类

// 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; 
    } 

的更新()失败,出现以下错误控制台应用程序:

无法更新数据库,因为有挂起的更改,并自动迁移到当前的匹配模型被禁用。 将暂挂模型更改写入基于代码的迁移或启用自动迁移。 将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()调用步骤,它进入配置()构造函数和MyDbContext()构造函数,但之后失败了,好像它没有试图在所有的初始迁移。

回答

0

确保数据库初始化策略是正确的在你的EF上下文的构造函数,如:

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

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

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

+0

感谢您的回复,我已经尝试过,没有成功:( – wk4questions

+0

编辑我的回答:安全呢? –

0

发现问题,这是不正确的命名空间。

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