2012-01-26 45 views
6

我與EF 4.3(測試版)如何忽略EF 4.3遷移表/類

我有一些新的類應生成數據庫表和列測試。

從一箇舊項目我有我的架構中的一些舊錶,我想通過EF訪問。 聲明所有類。爲了訪問舊錶,有一個映射的poco。

db遷移也嘗試創建舊錶。

它如何設置該類/表不是遷移的一部分,而是ef模型的一部分?

xxx.OnModelCreating()  
{ 
    modelBuilder.Ignore<myOldTableClass>();  
} 

從模型中刪除整個類。最後我不能用它通過dbContext進行訪問。

我喜歡使用自動遷移。 我儘量避免將舊的數據庫表完全遷移到EF類。 (是的,我知道那裏有發電機) 有120個表,舊的應用程序仍在使用它。

僅與EF(新應用程序)一起使用的一些新表。 有3個常用的表格。 那些不應該創建,但通過ef訪問。

回答

21

隨着發佈有內置在這種情況下支持EF 4.3.1。添加映射到數據庫中現有表的類時,請使用-IngoreChanges切換到Add-Migration

這將生成一個空遷移,其中包含新添加的類的更新後的元數據簽名。

通常這開始使用EF遷移的時候,因此「InitialMigration」的名稱做:

Add-Migration InitialMigration –IgnoreChanges 
+0

這很棒,爲我工作。 –

+0

我不明白從這個答案如何指定類名忽略。 –

+0

我不知道如果我們只想忽略一個特定的表(即現有的表可以跳過遷移),這可能會如何工作。 modelBuilder.Ignore ();沒有任何意義,因爲我們想要約束力。 – Spock

3

在這種情況下,正確的工作流程是在添加更改(新類)之前創建第一個遷移,而不是添加新類,然後創建新遷移,您將只有新表。

如果您迄今尚未使用遷移,則框架將爲您在項目中擁有的所有表生成遷移,因爲它認爲您正在創建初始遷移。生成遷移後,您可以修改其源文件並從Up方法中刪除舊類的CreateTable代碼。 問題是您可能必須在隨後的遷移中執行此操作。

編輯:我寫了一個walkthrough添加遷移到現有項目與EF 4.3.1

+0

該表將被包括在該遷移的元數據,這樣他們就不會在隨後的遷移重新出現。 –

+1

@AndersAbel:是的。確實如此。我糾正了我的答案。 –

+0

這將與AutomaticMigrationEnabled = true一起使用嗎? – Spock