ASP.Net Core項目在Mac上使用Entity Framework Core 2.0進行遷移可能會遇到的一個問題.
在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進行遷移可能會遇到的一個問題.