2017-07-25 73 views
0

我需要執行原始SQL作爲使用實體框架進行數據庫初始化的一部分。在SQL需要設置列的排序規則,並給出一個上下文時的代碼看起來是這樣的在實體框架遷移上執行原始SQL

context.Database.ExecuteSqlCommand("ALTER TABLE my_table ALTER COLUMN my_column nvarchar(200) COLLATE Latin1_General_CS_AS"); 

的問題是在哪裏把這個代碼?如果我將它放在方法Configuration.cs的EF創建的時候,我可以工作,但如果我決定在以後刪除遷移和重新定義標記,我將失去執行SQL的所有知識。理想情況下,我希望將此SQL執行抽象爲EF知道要在每次啓用遷移和更新數據庫時執行的另一個類。

我曾考慮過使用database initializer,但在進一步閱讀時,似乎這些僅由調用應用程序調用:這不應該是調用應用程序的責任 - 我希望它在實體框架創建時設置排序規則數據庫。

如何確保我將原始SQL作爲EF初始/基線配置的一部分執行,以便我不會丟失對未來所做工作的知識(即,不僅僅將它全部納入到種子方法中默認Configuration.cs

回答

0
void Up() { 
    Sql("ALTER TABLE my_table ALTER COLUMN my_column nvarchar(200) COLLATE Latin1_General_CS_AS"); 
} 

另一種選擇是做種子法的一部分,但移民似乎更理智。

+0

當然,但嵌入此遷移的唯一方法?首次構建數據庫時,我經常發現自己清理遷移並開始新鮮事,否則最終會產生大量遷移,隨着模型的發展,這些遷移實際上只是噪聲。我不得不記得每次添加這些sql語句。 –

+0

你有沒有找到另一個解決方案呢,@JamesB? – Dustin