1. 程式人生 > >ASP.Net Core項目在Mac上使用Entity Framework Core 2.0進行遷移可能會遇到的一個問題.

ASP.Net Core項目在Mac上使用Entity Framework Core 2.0進行遷移可能會遇到的一個問題.

連接字符串 ron dex cal orm 並且 fig pre RM

在ASP.Net Core 2.0的項目裏, 我使用Entity Framework Core 2.0 作為ORM.

有人習慣把數據庫的連接字符串寫在appSettings.json裏面, 有的習慣寫死在程序裏, 有的習慣把它放在launchSettings.json裏面(只放在這裏的話遷移命令就找不到連接字符串了吧).

我習慣把連接字符串寫成系統的環境變量.

我這個項目數據庫的連接字符串的變量名是 “MLH:SalesApi:DefaultConnection”, 在windows 10上, 我設置了環境變量, 然後一切cli命令操作都好用.

但是在mac上, 我遇到了問題.

如果我像windows 10那樣設置環境變量的名字:

export MLH:SalesApi:DefaultConnection="Server=localhost; Database=SalesApi; User Id=sa; Password=Bx@steel; MultipleActiveResultSets=true"
export MLH:AuthorizationServer:DefaultConnection="Server=localhost; Database=AuthorizationServer; User Id=sa; Password=Bx@steel; MultipleActiveResultSets=true
"

那麽在運行bash的時候:

技術分享圖片

就會提示有錯誤, 因為bash並不支持變量名帶有冒號 : .

1. 在查看了efcore, asp.netcore文檔以及搜索so以後, 我找到了第一個差勁的解決辦法:

使用env命令, 它會設定環境變量並且之後後邊跟著的命令.

然後我就“env 環境變量 dotnet ef命令”:

env MLH:SalesApi:DefaultConnection="Server=localhost; Database=SalesApi; User Id=sa; Password=Bx@steel; MultipleActiveResultSets=true
"
dotnet ef database update

這個命令的問題是, 設置的這個環境變量只對它後邊跟著的命令有效...所以如果想再次遷移的話, 就需要再輸入一邊這串命令:

技術分享圖片

所以這個辦法是不可取的.

2. 經過仔細查看文檔, 我發現了終極解決辦法 (還是文檔看的不細): https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/index?tabs=basicconfiguration#configuration-by-environment

技術分享圖片

如果系統不支持環境變量名裏面有冒號:, 那麽請使用兩個下劃線代替冒號.

那麽就把環境變量名改一下:

export MLH__SalesApi__DefaultConnection="Server=localhost; Database=SalesApi; User Id=sa; Password=Bx@steel; MultipleActiveResultSets=true"
export MLH__AuthorizationServer__DefaultConnection="Server=localhost; Database=AuthorizationServer; User Id=sa; Password=Bx@steel; MultipleActiveResultSets=true"

然後關閉bash, 重新開啟bash:

執行dotnet ef命令:

技術分享圖片

OK.

ASP.Net Core項目在Mac上使用Entity Framework Core 2.0進行遷移可能會遇到的一個問題.