Dot-Net
如何防止 DbContext 更改數據庫?
我正在學習實體框架(目前使用 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."); }再次編輯:
我試圖了解您要完成的場景。如果您有現有的數據庫,並且您想手動更新它,這是一種方法:
- 使用 DbContext 生成器模板從現有數據庫生成 DbContext 和實體。
- 執行啟用遷移
- 做添加遷移初始
- 如果一切都正確完成,第 3 步應該會生成空遷移。你可以刪除它。
- 現在,每當您進行一些更改時,您都需要執行 add-migration ChangeName。這不會進入數據庫,除非您執行更新數據庫。