2014-02-10 60 views
1

問題是關於:即數據庫模式改變的EntityFramework 6代碼第一次時,SQL Server 2012的EntityFramework - 檢測數據庫方案在生產手動更改

如何檢測,並與當前EF模式不兼容?

我正在談論生產服務器和應用程序。默認初始化器是'null',當然它不會自動更新生產數據庫。

但是,如果數據庫架構發生變化,並且不再與我的模型兼容,我希望應用程序必須在程序啓動時檢測到它。可以手動完成。

,如果我沒有錯,在__MigrationHistory表的EntityFramework賣場當前的模式,並驗證它的第一個上下文相關操作,但與「空」的初始化。基於這個原因,我想在應用程序啓動時手動執行它。

我假設EntityFramework有相關的功能,我希望他們不是私人的,我可以使用它們。

(我對今天我們的一個客戶造成的手動數據庫模式變化的問題)

更新:事實上,通過運行相同的應用程序更新TSQL腳本發生數據庫架構更改,但應用程序本身不被更新。

+0

即使使用null初始值設定項,也會檢查兼容性。在這種情況下,如果失敗,您會收到一個異常。 – Aron

+0

在這種情況下,由另一個問題引起的問題。 MSDN文檔的 – Ayhan

+0

-1簡單快速的檢查,得到['DbContext.Database.CompatibleWithModel'](http://msdn.microsoft.com/en-us/library/system.data.entity.database.compatiblewithmodel%28v=vs .113%29.aspx) – Aron

回答

3

使用自定義初始值設定項來完成此任務。

public class ValidateDatabase<TContext> : IDatabaseInitializer<TContext> 
    where TContext : DbContext 
{ 
    public void InitializeDatabase(TContext context) 
    { 
    if (!context.Database.Exists()) 
    { 
     throw new ConfigurationException("Database does not exist"); 
    } 
    else 
    { 
     if (!context.Database.CompatibleWithModel(true)) 
     { 
     throw new InvalidOperationException("The database is not compatible with the entity model."); 
     } 
    } 
    } 
}