1

私はこの回答のようにストアドプロシージャ作成のソリューションを持っていますhttps://stackoverflow.com/a/15171900コードファーストDbMigrationでストアドプロシージャを更新します

私は私の最初のDbMigrationで

Sql(Properties.Resources.Create_sp_DoSomething); 

を実行しています。

My SQLスクリプトには、既存のSPを先にドロップして新しい更新SPを作成するコードがあります。だから私は実行するとき

Sql(Properties.Resources.Create_sp_DoSomething); 

新しいDbMigrationで、ロジック内SPの変更はすべて正常に動作します。

後でコミットするときにモデルに追加された列(例:IsActive)でストアドプロシージャを更新するときに問題が発生し、既存のDBなしで更新しています(新しいDBが作成されます)。 次に失敗します

無効な列名 'IsActive'。

SQL(Properties.Resources.Create_sp_DoSomething)へのすべての既存のコールを除去するよりも、他の任意の良い解決策。

であり、最新のDbMigrationでのみ使用してください。

答えて

4

(移行シードであなたのストアドプロシージャの更新を実行して、モデル作成から、あなたのストアドプロシージャを区切り)すべての移行後に実行する方法:

context.Database.ExecuteSqlCommand(sp_DoSomething); 

これは、すべてのアップデート、データベースで実行されますので、必要になりますCreate_sp_DoSomethingの先頭にexistanceチェックを追加することにより、冪等のスクリプトを作成する必要があります。

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/のようなものが必要です –

関連する問題