我想請問一下,假設我.net core 的DB是用DB FIRST的方式建立
建立完後大概是這樣
現在我想新增Table UserToken
我用下面這段
Scaffold-DbContext -Connection "Server=aaa;Database=bbb;Trusted_Connection=True; User ID=ccc;Password=ddd" Microsoft.EntityFrameworkCore.SqlServer -OutputDir C:\Users\xxx\OneDrive\文件\BoardCore\Models\Enitites\ -Force
執行完後變成這樣
變成說好像除了我自己指定的位置有更新到之外還有在別的地方又新增相關MODEL
請問我該如何調整我的指令呢?
使用 Scaffold-DbContext 指令產生 Entity Framework 的 model 程式碼時,可能會因為資料庫結構變化而導致產生重複的 model 程式碼。為了避免這個問題,可以使用下列指令來產生指定 Table 的 model 程式碼:
Scaffold-DbContext "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" Microsoft.EntityFrameworkCore.SqlServer -Tables UserToken -OutputDir Models
上述指令中,-Tables 參數指定要產生 model 的 Table 名稱,-OutputDir 參數指定產生的 model 程式碼的輸出路徑。請將 myServerAddress、myDataBase、myUsername、myPassword 參數替換為你的資料庫連線資訊。
另外,若想要更新現有的 model 程式碼,也可以使用 Scaffold-DbContext 指令的 -Force 參數,強制覆蓋現有的 model 程式碼,例如:
Scaffold-DbContext "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force
請注意,使用 -Force 參數可能會導致現有的 model 程式碼遺失,請務必先備份重要的檔案。
你是用DB First的話應該是會需要Scaffold出當前DB的Model吧?
可以使用 -o 或是 --output-dir 後面加上你的路徑來決定Model的生成位置
你可以在Package Manager Console中輸入'dotnet ef dbcontext scaffold -h'查看更多細部設定
一些我整理的常用指令給你參考
-d | --data-annotations : 使用屬性定義模型
-c | --context : 產生的DbContext名稱
--context-dir : 產生的DbContext位置
-f | --force : 覆寫現有檔案
-o | --output-dir : 產生的Entity Model位置
--schema <SCHEMA_NAME1>, <SCHEMA_NAME2>... : 指定Schemas產生Entity
-t | --table <TABLE_NAME1>, <TABLE_NAME2>... : 指定Table產生Entity
--use-database-names : 強制使用DB中Table與Column Name
--json : 輸出Json格式資料表於PM Console
-n | --namespace : 指定命名空間,預設會依照專案與資料夾命名
--context-namespace : 指定DbContext命名空間,預設會依照專案與資料夾命名
--no-onconfiguring : 不產生DbContext中的OnConfiguring
--no-pluralize : 關閉自動複數判別
-p | --project : 指定專案
-s | --startup-project : 指定指令執行時起始專案
--framework : 指定框架版本
--configuration : 指定配置
--no-build : 跳過專案建置
你好,我確實是用Scaffold來產生相關MODEL
我想放的路徑在這裡
C:\Users\xxx\OneDrive\文件\BoardCore\Models\Enitites\
所以我指令是這樣寫
Scaffold-DbContext -Connection "Server=aaa;Database=bbb;Trusted_Connection=True; User ID=ccc;Password=ddd" Microsoft.EntityFrameworkCore.SqlServer -OutputDir C:\Users\xxx\OneDrive\文件\BoardCore\Models\Enitites\ -Force
這樣雖然我的指定地區有產生新的MODEL
但是卻又在別的地方也產生新的MODLE@@
所以才好奇是不是我指令打錯
建議不打絕對路徑
只打單純目錄名稱(他就會以當前專案下去找該目錄喔)
https://coolmandiary.blogspot.com/2021/07/net-core10ef-coredb-first.html
然後一般都會是將它拆分成單獨一個Class Library專案添加EFCore參考
針對他去單一專案做Scaffold生成。
其餘專案再去專案參考進來