Entity Framework 6.0以後的版本可用性比較好。EFCore還兼具了跨平台的特性,簡要介紹一下可用的三種實作方式:
一、GenMs
此方法使用于Windows平台,Mac平台生成檔案時路徑有問題
1、安裝GenMs/GenPg/GenMy
在終端/指令提示符裡輸入:
dotnet tool install genmy -g # 根據mysql庫生成
dotnet tool install genms -g # 根據sqlserver庫生成
dotnet tool install genpg -g # 根據postgresql庫生成
2、工具參數說明
-U SQLServer賬号
-P SQLServer密碼
-D 需要生成的資料庫
-N 字元串,生成代碼的解決方案名和命名空間
-S 生成解決方案,在項目第一次生成時使用
-A 生成背景管理
-R 下載下傳資源
-O 輸出路徑(預設:目前目錄)
3、建立工程生成代碼
genms 127.0.0.1 -U sa -P password -D MyDataBase -N MyEFProject -S -A -R
4、特殊說明
本人使用Mac系統試用了該指令,生成過程中報錯,但也生成了檔案,生成的檔案名中包含了:“src\..\xxxx”等字樣的内容,把目錄結構内容也輸出到了檔案名中。
Windows系統直接使用上述指令可以生成。
Linux未做測試。
二、Scaffold-DbContext / dotnet ef dbcontext scaffold方式
Scaffold-DbContext指令在Core2.0後合至CLI工具中,即dotnet ef dbcontext scaffold
1、安裝ef
dotnet install tool -g dotnet-ef
執行上述指令後,即可執行dotnet ef相關指令
2、dotnet ef dbcontext scaffold指令相關參數說明
dotnet ef dbcontext scaffold [arguments] [options]
必要參數:
<CONNECTION> 連接配接到DB的連接配接串
<PROVIDER> 使用的Provider (例如:Microsoft.EntityFrameworkCore.SqlServer)
可選配置:
-d|--data-annotations 使用特性(Attribute)來配置模闆(如果可行). 如果省略,則隻使用fluent API
-c|--context <NAME> 指定DbContext的名稱
--context-dir <PATH> 要放入DbContext檔案的目錄。路徑是相對于項目目錄的
-f|--force 覆寫已存在的檔案
-o|--output-dir <PATH> 存放檔案的目錄。路徑是相對于項目目錄的
--schema <SCHEMA_NAME>... 要為其生成實體類型的表的架構
-t|--table <TABLE_NAME>... 要為其生成實體類型的表
--use-database-names 直接使用資料庫中表名和列名
--json 顯示Json輸出
-p|--project <PROJECT> 指定使用的工程
-s|--startup-project <PROJECT> 要使用的啟動項
--framework <FRAMEWORK> 目标Framework
--configuration <CONFIGURATION> 要使用的配置
--runtime <RUNTIME_IDENTIFIER> 要使用的RunTime
--msbuildprojectextensionspath <PATH> MSBuild項目擴充路徑。預設為“obj”
--no-build 不要建構項目(僅當生成是最新的時才使用此選項)
-h|--help 顯示幫助資訊
-v|--verbose 顯示詳細輸出
--no-color 不給輸出着色
--prefix-output 帶級别的輸出字首
3、生成代碼
指令行進入EfModel工程的目錄
僅使用必要參數,輸入如下指令并修改必要參數:
dotnet ef dbcontext scaffold "user id=YOUR_USERNAME;password=YOUR_PWD;initial catalog=Temp;data source=YOURID_OR_MACHINENAME" Microsoft.EntityFrameworkCore.SqlServer
在目前工程的根目錄下生成了對應的DbContext.cs檔案與各個Model.cs檔案
4、特殊說明
如需使用Scaffold-DbContext指令,需要使用VS的Nuget控制台。
Scaffold-DbContext指令在Core2.0後合至CLI工具中,即dotnet ef dbcontext scaffold
dotnet ef dbcontext scaffold方法跨平台支援良好