Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 首先更新数据库未在代码中工作_Entity Framework_Stored Procedures_Code First_Entity Framework Migrations - Fatal编程技术网

Entity framework 首先更新数据库未在代码中工作

Entity framework 首先更新数据库未在代码中工作,entity-framework,stored-procedures,code-first,entity-framework-migrations,Entity Framework,Stored Procedures,Code First,Entity Framework Migrations,我正在使用实体框架和Codefirst创建一个存储过程。 正如我所说,我们应该在PackageManager中执行一些步骤来创建SP 1-启用迁移 2-添加迁移MYclass 3-更新数据库 在Myclass(newcreated)中,我用UP()方法编写SP代码来创建SP。工作正常!!但当我更改SP并再次运行更新数据库时,它不起作用,我需要执行另一个添加迁移命令来创建新的MYclass2。是这样吗?我是说每次我都要写添加迁移 这是麦可德 public override void Up()

我正在使用实体框架和Codefirst创建一个存储过程。 正如我所说,我们应该在PackageManager中执行一些步骤来创建SP

1-启用迁移

2-添加迁移MYclass

3-更新数据库

Myclass(newcreated)
中,我用UP()方法编写SP代码来创建SP。工作正常!!但当我更改SP并再次运行更新数据库时,它不起作用,我需要执行另一个添加迁移命令来创建新的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");
        }
当我再次运行更新数据库时,结果是“没有挂起的显式迁移”

即使我将SQL查询更改为“ALTERPROCEDURE…”,它也不会工作,不会发生任何更改。 谢谢

已编辑

考虑这种情况,我想更改我的SP名称(只是一个示例) 所以我需要将查询更改为“ALTERSTORE procedure TESPP2…”
或者任何其他更改,我是否应该再次运行添加迁移??或者应该更新数据库???

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

也可以使用回滚/撤消命令

更新数据库-TargetMigration:MigrationsName


然后使用
更新数据库-force

,那么在这个代码之后会发生什么呢?考虑我想改变我的SturePR查询,我应该一步一步地做什么?你可以添加另一个迁移并在那里更改你的代码,这是最好的方法,或者如果你不在生产中,你可以手动完成,首先删除最后一行的迁移历史表,然后运行更新数据库命令,它将在上次迁移时重新更新您的数据库,但当我们首先使用代码时,它应该不会访问SQl server及其表。我认为更新数据库应该自动完成!!!所以没有关于迁移的任何更新,对吗??每次我们都应该创建新的迁移。是的,你说得对,我建议它绕开实体框架规则,你需要在每次更改查询时添加新的迁移。