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/ –