更新数据库无法在代码中工作

时间:2017-09-14 07:27:08

标签: entity-framework stored-procedures code-first ef-migrations

我正在使用实体框架和Codefirst来创建一个存储过程。 在我的时候,我们应该在包管理器中做一些步骤来创建SP。

1 - 启用迁移

2- add-migration MYclass

3- update-database

并在Myclass(new created)中我用UP()方法编写SP代码来创建SP。工作良好!!但是,当我更改SP并再次运行update-database时,它不起作用,我需要执行另一个add-migration命令来创建新的MYclass2。是对的吗?我的意思是每次我都应该编写add-migration?

这是我的代码

  public override void Up()
        {
            Sql(@"Create procedure testSp 
                        as 
select std.Id as stdName, std.Name as MajorName, mj.Name from dbo.Students as std
inner join dbo.Majors as mj on std.Id = mj.Id
");
        }

        public override void Down()
        {
            Sql("drop procedure testSp");
        }

当我再次运行update-database时,结果为"No pending explicit migration"

即使我将SQL查询更改为"更改程序...."它不起作用,没有变化。 感谢

EDITED

考虑这种情况,我想更改我的SP名称(只是一个例子) 所以我需要将查询更改为"更改商店程序tespSP2 ..." 或者任何其他更改,我应该再次运行add-migration吗?或更新数据库应该这样做??

1 个答案:

答案 0 :(得分:1)

在添加到_migrationHistory表的实体框架迁移中,您可以删除此表的最后一行[不建议使用]

或者您可以使用rollback / undo命令

Update-Database -TargetMigration:MigrationsName

然后使用update-database -force