1

我有存储过程创建的解决方案,就像在此答案中一样https://stackoverflow.com/a/15171900在Code First DbMigration中更新存储过程

我在我最初DbMigration运行

Sql(Properties.Resources.Create_sp_DoSomething); 

我的sql脚本有代码首先删除现有的SP,然后创建新的更新的SP。所以whene我在新DbMigration运行

Sql(Properties.Resources.Create_sp_DoSomething); 

,和内部SP逻辑变成一切工作正常。

出现的问题时,我想更新存储过程的列(可以说IsActive),它被添加到模型中后提交,我不存在的数据库更新(所以新的数据库创建)。 然后它失败

无效的列名称'IsActive'。

任何很好地解决的是,除了去除到

SQL(Properties.Resources.Create_sp_DoSomething)所有现有呼叫;

只有在最新的DbMigration中才有它。

回答

4

独立的存储在其中的所有迁移后运行迁移种子()方法做你的存储过程的更新从你的模型创建步骤:

context.Database.ExecuteSqlCommand(sp_DoSomething); 

由于这与每一个更新的数据库运行时,你会需要做出通过添加所有脑干检查Create_sp_DoSomething开始幂等脚本:

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'sp_DoSomething') 
BEGIN 
    DROP PROCEDURE sp_DoSomething 
END 
+1

当你做出这个脚本幂(这是需要),你需要添加* GO *下降之间的语句和创建SP,这* ExecuteSqlComma方法nd()*将需要类似https://smehrozalam.wordpress.com/2009/05/12/c-executing-batch-t-sql-scripts-with-go-statements/ –