2014-02-20 132 views
1

我已經寫在與SQL Server精簡4.0數據庫組合使用EF 6.0的應用程序。當客戶第一次使用這個應用程序時,它(應用程序)應該在給定路徑中創建一個具有初始值的數據庫文件。也應該允許遷移,因爲很可能對象模型可能隨着將來版本的應用程序而改變。策略部署EF控制數據庫

現在I'm想知道什麼將是部署用戶生產系統上的數據庫的最佳方式。我能想到的方法有三種:

  1. 我可以創建一個數據庫文件與初始值,只是在安裝過程中把它複製到正確的位置,並在應用程序中使用MigrateDatabaseToLatestVersionInitializer。

  2. 在的DbContext-構造函數(我有兩個上下文),我可以據此檢查現有DB-文件,並使用不同的數據庫,初始化器。類似於CreateDatabaseIfNotExistsInitializer,其中包含一個種子方法,該方法在未找到場時創建初始數據,如果DB文件存在則創建MigrateDatabaseToLatestVersionInitializer。

  3. 我可以始終使用MigrateDatabaseToLatestVersionInitializer並在其「種子」 - 方法檢查現有表項並創建它們(如果它們不存在)。

以下哪種方式是首選或者是有沒有更好的辦法,我認爲didn't的?

回答

1

這聽起來像這是一個桌面應用程序,所以你可能要趕上約在安裝時創建的數據庫文件(即選項1),而不是運行時間,尤其是在選項2數據庫初始化權限的錯誤不是一個勢在必行你給的命令,你可以嘗試......抓住周圍。

我不認爲選項3會工作,因爲Seed方法在所有遷移後運行,所以肯定遷移將成功運行,在這種情況下表不需要創建,否則它們將失敗因爲數據庫不存在,因此你的Seed方法不會運行。當然you're權,方法doesn't在所有的工作

+0

,因爲MigrateToLatestDatabase初始化程序需要現有的數據庫,或者可能是migrationhistory表我承擔。我想我會堅持方法1。 – tafkab76