2014-03-05 47 views
2

好的,所以我完全依賴我的遷移和種子代碼來維護所有數據庫結構和初始數據。因此,我面臨的情況是,我在此版本中所做的所有更改都直接在數據庫(存儲過程和更新)上進行,而C#代碼本身沒有任何更改。因爲我想使用新的遷移來做這些DataBase特定的更改(並且「添加遷移」不會執行任何操作 - 導致代碼沒有更改),所以如何強制新的空代碼第一次遷移將我的更改手動放在它上面?如何強制執行新的空EF遷移?

+0

可能的重複http://stackoverflow.com/questions/7667630/can-you-create-sql-views-stored-procedure-using-entity-framework-4-1-code-firs –

+0

不重複,這是問題是關於基於代碼的遷移,而您指向的另一個關於代碼優先。 –

回答

2

您必須添加一個空的遷移並手動將代碼添加到Up和Down方法中。我發現人們傾向於認爲這些方法的代碼必須由類似於「.designer」文件的工具生成,而事實並非如此。事實上,我經常發現自己編輯並在其中添加代碼。 爲此,我把所有的SQL代碼,我在腳本文件來執行,然後在向上的方法是這樣的執行:

public override void Up(){ 
    var dirBase = AppDomain.CurrentDomain.BaseDirectory.Replace(@"\bin",string.Empty) + @"\Migrations\SqlScripts"; 
    Sql(File.ReadAllText(dirBase + @"\CreateMyViews.sql")); 
    Sql(File.ReadAllText(dirBase + @"\CreateMySproc.sql")); 
} 

public override void Down(){ 
     var dirBase = AppDomain.CurrentDomain.BaseDirectory.Replace(@"\bin",string.Empty) + @"\Migrations\SqlScripts"; 
    Sql(File.ReadAllText(dirBase + @"\DropMySproc.sql")); 
    Sql(File.ReadAllText(dirBase + @"\DropMyViews.sql")); 
} 

我建議你讀這個鏈接: http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/

+0

問題是:一旦我創建了一個遷移.cs文件,使用DbMigration的部分類,部分的Up和Down方法(與「add-migration」命令創建的方法完全一樣),然後運行「update-database」它只是簡單地報告「沒有正在進行的基於代碼的遷移」...:/ –

+0

您必須像通常那樣使用添加遷移來創建文件。之後,您將擁有一個空的遷移文件,即您必須編輯Up和Down方法(如我提供的示例代碼)。這樣Update-Database將完成它的工作。 –

1

在包管理器控制檯發出命令

Add-Migration "My new empty migration" 

這會產生這種遷移模板

public partial class Mynewemptymigration : DbMigration 
{ 
    public override void Up() 
    { 
    } 

    public override void Down() 
    { 
    } 
} 

然後,您可以創建自己的自定義向上和向下遷移步驟。如果你的模型不是最新的,那麼上下就會有遷移代碼。在這種情況下,您需要更新您的模型,然後添加一個新的空遷移。