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

solenovex發表於2018-03-26

在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.

相關文章