2011-11-17 23 views
0

我在我的解決方案中使用EF Code First,後面跟着SQL Server Express。當我更新我的模型時,我總是必須在重新啓動我的解決方案之前刪除我的數據庫。我知道這是因爲我的數據庫不是最新的。在這種情況下,我會丟失表格中的所有數據。當我更新我的模型時,我在表格中丟失了所有數據

我希望能夠更新我的模型(例如:添加一個新字段)並將所有數據保留在我的表中。

即使我手動更新我的數據庫,當我重新啓動的解決方案,我得到的錯誤如下:

自數據庫創建的模型支持的「EntityFrameworkDbContext」已經時過境遷。要麼手動刪除/更新數據庫,要麼使用IDatabaseInitializer實例調用Database.SetInitializer

有什麼建議嗎?

謝謝。

+0

什麼是手動?如果使用SQL命令添加新表,則散列不會更改,因此您的模型仍然有效。 – Gleno

回答

1

您可以刪除EdmMetadata表的創建,如下所示。

public class MyContext : DbContext 
{ 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
    } 
} 

這樣,您可以手動更新數據庫而不會出現錯誤。

您可以檢出Code First Migrations

+0

它的作品非常多。謝謝。 – Bronzato

0

擴大一下我的評論。這通常是不可能的,CF也不是爲此而設計的。唯一的解決方法是使用SQL命令手動更新你的表,並在你的代碼優先模型更新之前,更新數據庫模型驗證散列,並將其存儲爲EDMmetadata或其他數據庫。

要獲得正確的散列值,您可以創建一個臨時數據庫,並從那裏複製您的值。

不漂亮,但它的作品。

+0

感謝您的建議。當我創建一個臨時數據庫時,我可以在哪裏找到爲該數據庫生成的哈希值? – Bronzato

相關問題