【问题标题】:update-database not working in Code first更新数据库首先在代码中不起作用
【发布时间】:2017-09-14 07:27:07
【问题描述】:

我正在使用实体框架和 Codefirst 创建存储过程。 正如我所强调的,我们应该在包管理器中执行一些步骤来创建 SP。

1 - 启用迁移

2- add-migration MYclass

3-更新数据库

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

这是我的代码

  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 查询更改为“Alter procedure....”,它也不起作用,也不会发生任何变化。 谢谢

已编辑

考虑这种情况,我想更改我的 SP 名称(仅作为示例) 所以我需要将查询更改为“更改存储过程 tespSP2 ...” 或任何其他更改,我应该再次运行 add-migration 吗?还是 update-database 应该这样做??

【问题讨论】:

  • 讨论了各种技术here

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


【解决方案1】:

在实体框架迁移中添加到 _migrationHistory 表中,可以删除该表的最后一行[不推荐]

或者你可以使用回滚/撤消命令

Update-Database -TargetMigration:MigrationsName

然后使用update-database -force

【讨论】:

  • 那么这段代码之后会发生什么?考虑我想更改我的 storePr 查询,我应该逐步做什么?
  • 您可以添加另一个迁移并在那里更改您的代码,这是最好的方法,或者如果您不在生产环境中,您可以手动执行,首先删除 _migrationHistory 表的最后一行,然后运行更新-database 命令,它将使用上次迁移重新更新您的数据库
  • 但是当我们首先使用代码时,它应该不能访问 SQl 服务器及其表。我认为更新数据库应该自动完成!!!所以没有任何关于迁移的REwirte,对吗?每次我们应该创建新的迁移。
  • 是的,你说得对,我建议它绕过实体框架规则,每次更改查询时都需要添加新的迁移
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
相关资源
最近更新 更多