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