Dot-Net

如何防止 DbContext 更改數據庫?

  • September 1, 2015

我正在學習實體框架(目前使用 EF6 beta),並且我在現有數據庫上使用程式碼優先模式。實體和DbContext類是使用 T4 模板自動創建的。

我想防止DbContext在執行時在數據庫中創建/更改任何內容。

我怎樣才能做到這一點?

當您執行enable-migrations命令時,您將看到**/Migrations文件夾,您可以在該文件夾下找到名為Configuration.cs**的文件。在該文件的建構子中,預設情況下,有一個屬性設置為 value:

AutomaticMigrationsEnabled = false;

這將確保您的數據庫不會自動遷移,而是通過手動呼叫每個遷移。

但是,如果您的數據庫比您的域模型大,即您只是在已經存在的數據庫的一部分上進行操作,那麼在您的應用程序啟動的某個位置(如果它是 ASP.NET 應用程序,Application_Start事件處理程序),您需要添加以下程式碼:

Database.SetInitializer<YourDbContext>(null);

否則,Entity Framework 將抱怨您的域模型中的數據庫定義與數據庫的實際目前狀態不匹配。

編輯:

如果您想確保 YourDbContext 沒有嘗試更改數據庫,請執行以下操作:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
   throw new YourCustomException("Code first changes are not allowed."); 
}

再次編輯:

我試圖了解您要完成的場景。如果您有現有的數據庫,並且您想手動更新它,這是一種方法:

  1. 使用 DbContext 生成器模板從現有數據庫生成 DbContext 和實體。
  2. 執行啟用遷移
  3. 做添加遷移初始
  4. 如果一切都正確完成,第 3 步應該會生成空遷移。你可以刪除它。
  5. 現在,每當您進行一些更改時,您都需要執行 add-migration ChangeName。這不會進入數據庫,除非您執行更新數據庫。

引用自:https://stackoverflow.com/questions/18863512