ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.

Posted cgzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; [email protected]; MultipleActiveResultSets=true"
export MLH:AuthorizationServer:DefaultConnection="Server=localhost; Database=AuthorizationServer; User Id=sa; [email protected]; MultipleActiveResultSets=true"

那么在运行bash的时候:

技术分享图片

就会提示有错误, 因为bash并不支持变量名带有冒号 : .

 

1. 在查看了efcore, asp.netcore文档以及搜索so以后, 我找到了第一个差劲的解决办法:

使用env命令, 它会设定环境变量并且之后后边跟着的命令.

然后我就“env 环境变量 dotnet ef命令”:

env MLH:SalesApi:DefaultConnection="Server=localhost; Database=SalesApi; User Id=sa; [email protected]; 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; [email protected]; MultipleActiveResultSets=true"
export MLH__AuthorizationServer__DefaultConnection="Server=localhost; Database=AuthorizationServer; User Id=sa; [email protected]; MultipleActiveResultSets=true"

 

然后关闭bash, 重新开启bash:

执行dotnet ef命令:

技术分享图片

OK.

以上是关于ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.的主要内容,如果未能解决你的问题,请参考以下文章

翻译在Mac上使用VSCode创建你的第一个Asp.Net Core应用

Dotnet 在 Mac ASP.NET Core 3 上意外退出

如何在 Mac 上将 ASP.Net Core 连接到 SQL Server Docker 容器

在mac中找不到匹配命令“dotnet-aspnet-codegenerator”asp.net core 2.1项目的可执行文件

ASP.NET Core 3.1 Angular Web App 在 Windows 上构建和运行,但在 Mac OSX 和 Docker 上失败

2021-06-24 .NET高级班 64-ASP.NET Core EFCore数据库(DBFirst的使用)