c# - Entity Framework 代码优先 - 初始代码迁移不起作用

标签 c# entity-framework entity-framework-6 entity-framework-migrations

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

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

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

然后我在 visual studio 中尝试了 Update-Database 命令,它工作正常,创建了数据库并运行了初始迁移。

然后我从 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;
    }

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() 构造函数,但之后失败了,它似乎根本没有尝试初始迁移。

最佳答案

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

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

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

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

关于c# - Entity Framework 代码优先 - 初始代码迁移不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30213692/

相关文章:

c# - 使用 SHA256 时,带有 InternalsVisibleTo 标记的 StrongNaming 失败

c# - 如何将 TabControl 标题的文本左对齐?

c# - Server.Transfer 导致 Session 异常

c# - 无法比较类型为 'System.Collections.Generic.ICollection`的元素 1 只支持原始类型、枚举类型和实体类型

.net - 指定的架构无效。错误 : The relationship 'EntityA_EntityBs' was not loaded because the type 'EntityB' is not available

c# - 从代码生成映射 View - EF6

c# - 调试Xamarin iOS System.Net.HttpMessageHandler时出错

c# - LINQ to Entities 不支持 LINQ 表达式节点类型 'ArrayIndex'

c# - EF linq 查询子句的顺序会影响性能吗?

c# - EF6,延迟加载未按预期工作