簡體   English   中英

EF-Core - 數據庫首次遷移

[英]EF-Core - Database first migration

我想知道在優先使用 EF Core 數據庫時是否有處理遷移的標准方法。

每次我對數據庫進行更改時,我都會在 CLI 中運行:

dotnet ef dbcontext scaffold "Data Source=(local);Initial Catalog=myCatalog;Trusted_Connection=true;" Microsoft.EntityFrameworkCore.SqlServer -o Models -f

它的問題覆蓋了我在其他實體和 dbcontext 中所做的每一個更改,例如我為每個實體都有一個Id接口,當我搭建腳手架時我稍后需要再次將它添加到實體中,是否可以將項目與同步數據庫或者只是特定的實體?

另一個問題是,我最近不得不將實體的默認DeleteBehaviorDeleteBehavior.ClientSetNullDeleteBehavior.Cascade ,所以現在每次我使用腳手架方法時,我都需要在OnModelCreating方法中手動更改 100 多個實體。

在 .Net Core 中你並沒有真正的數據庫優先。 所以這意味着 scaffold 命令就在那里讓你在一個代碼優先的項目中啟動並運行你有一個現有的數據庫。

這對您來說意味着您必須決定要在何處進行更改:

a) 數據庫,或

b) 數據訪問項目

這些選項中的任何一個都是有效的,但你必須選擇一個並堅持下去。

如果您在數據庫中進行更改,則必須更改所有表並向它們添加 ID 字段,然后再次運行 Scaffold 命令以更新您的 model。

如果您要更改 DA 項目中的實體,則每次更改一堆內容時都必須添加 EF Core 遷移。

在這兩種情況下,您都希望通過一組 SQL 腳本或讓應用程序在啟動時執行數據庫遷移,將數據庫更新作為部署的一部分。

但是你不應該做的是試圖改變這兩個地方的事情。 這就是您破壞部署的方式。

是的,您可以通過指定架構和表來限制對哪些表進行反向工程。

--schema選項可用於包含模式中的每個表,而--table可用於包含特定表。 注意:對 CLI 使用--table -table管理器控制台的表。

嘗試像下面這樣只更新Foo表。 單擊此處了解更多詳情。

dotnet ef dbcontext scaffold "Data Source=(local);Initial Catalog=myCatalog;Trusted_Connection=true;" Microsoft.EntityFrameworkCore.SqlServer -o Models -f --table Foo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM