天天看點

EFCore DbFirst生成代碼的兩種方式一、GenMs二、Scaffold-DbContext / dotnet ef dbcontext scaffold方式

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方法跨平台支援良好