2012-09-19 98 views
0

我正在支持需要遷移代碼的第一個生成的數據庫的應用程序。更改是將三個屬性(全部在同一個表/實體上)從一個字符串修改爲一個可爲空的小數。EF代碼遷移 - 將字符串遷移到十進制字段(v。4.3.1.0)

這樣做的部分要求是我需要將更改輸出到SQL文件,因爲我們將補丁部署到我們的客戶端,他們也在生產中託管產品。

我被告知這是可能的,但我不確定如何去做。

問題:如何使用EF代碼首先將數據庫表遷移爲具有可爲空的小數而不是字符串,並將更改輸出到SQL文件。我假定列中當前的所有值都可以轉換爲小數,但是如果不是這會改變複雜度?

+0

你期望在SQL文件中有什麼?遷移腳本爲SQL? – trailmax

+0

那麼如果它正在生成一個遷移腳本,我會這麼認爲。即列類型改變和一些腳本來保存數據。 – contactmatt

回答

0

如果我在要求正確的,那麼你就需要創建一個遷移,然後運行

Update-Database -Script 

這將創建一個對數據庫運行,以更新結構的SQL腳本。

另外Update-Database -Verbose會更新數據庫結構,並輸出SQL運行。

如果您需要保存的數據,你也可以在你的遷移腳本運行SQL直接:

public partial class RenameColumn : DbMigration 
{ 
    public override void Up() 
    { 
     Sql("update blah..."); 
    } 

    public override void Down() 
    { 
     Sql("drop table bobby"); 
    } 

還有你可以做任何你需要做的保留數據:新增臨時科拉姆/表,在那裏複製原始數據,更改列類型,將數據轉換爲所需的格式並將其複製到新列,清理。

如果您在遷移過程中使用了Sql命令,那麼當您運行Update-Database -Script時,它將爲您提供組合的腳本腳手架遷移腳本和手動編寫的腳本。

+0

我在哪裏輸入該命令? – contactmatt

+0

在程序包管理器控制器中。您運行'Add-Migration GiveMigratioAName' - 包管理器控制檯的窗口。在VS中進入菜單查看 - >其他窗口 - >程序包管理器控制檯 – trailmax

+0

查看數據保存的更新答案。 – trailmax