【问题标题】:Problem with "dotnet ef dbcontext scaffold" on Linux BashLinux Bash 上的“dotnet ef dbcontext scaffold”问题
【发布时间】:2018-11-21 05:29:33
【问题描述】:

在 linux bash 中发出以下命令时,

dotnet ef dbcontext scaffold "Server=192.168.1.5\MSSQLSERVER2017;Database=TestDb;User Id=test;Password=test@987" Microsoft.EntityFrameworkCore.SqlServer -o Models --context AppDbContext -t solid

我收到此错误消息:

Unrecognized command or argument 'Microsoft.EntityFrameworkCore.SqlServer'

我发现它是由命令中“用户 ID”中的空格引起的问题,因为当我删除空格时,我会收到此消息。

Keyword not supported: 'userid'

我尝试了很多组合,例如放置 User\ Id、'User Id'、“User Id”、User" "Id 以及我在互联网上找到的更多组合,但我仍然坚持这一点。我该如何解决这个问题?

我的 EF 版本:

Entity Framework Core .NET Command-line Tools
2.1.4-rtm-31024

我的 dotnet 版本:

.NET Core SDK (reflecting any global.json):
 Version:   2.1.500
 Commit:    b68b931422

Runtime Environment:
OS Name:     arch
OS Version:  
OS Platform: Linux
RID:         arch-x64
Base Path:   /opt/dotnet/sdk/2.1.500/

Host (useful for support):
Version: 2.1.6
Commit:  3f4f8eebd8

.NET Core SDKs installed:
 2.1.500 [/opt/dotnet/sdk]

.NET Core runtimes installed:
Microsoft.NETCore.App 2.1.6 [/opt/dotnet/shared/Microsoft.NETCore.App]

附:我已经在项目中添加了“Microsoft.EntityFrameworkCore.Design”包。

【问题讨论】:

  • 你找到解决办法了吗?
  • 您是直接在终端上运行命令还是通过 *.sh 文件运行命令?因为这个问题发生在我通过 *.sh 文件发出dotnet ef dbcontext scaffold 时。我通过将整个命令存储在一个变量中并使用eval 成功运行它来解决它。

标签: bash entity-framework-core asp.net-core-2.0


【解决方案1】:

我在 Windows 上也遇到了同样的问题。

但我使用下面的命令修复了它。

> dotnet ef dbcontext scaffold "Server=.\;Database=YourDatabase;Trusted_Connection=False; User ID=sa; Password=YourPassword;" Microsoft.EntityFrameworkCore.SqlServer -o Model -c "YourDBContext"

在我自己的情况下,我试图弄清楚我之前的命令出了什么问题,我得到了一些答案,尽管它们可能并不适用于所有人。

  1. 在“Server”键之前,我使用的是单引号,因此我将其更改为双引号。
  2. 在我的“。”对于服务器名称,我包含反斜杠“\”
  3. 我用双引号括住了我的数据库上下文。

虽然我采取了所有这些步骤,但事实是我不知道哪一个实际有效,但我可以向您保证,上面的代码运行良好。但是,您可以查看我在下面找到的文章。 https://www.learnentityframeworkcore.com/walkthroughs/existing-database

【讨论】:

    【解决方案2】:

    在 Linux Mint 20 上,我成功地做到了:

    dotnet ef dbcontext scaffold 'Server=localhost,1433;Database=MyAPICore;User ID=sa;Password=p4ssw0rd!;' Microsoft.EntityFrameworkCore.SqlServer -o Models -c 'ApiDbContext' -d -f
    

    【讨论】:

      【解决方案3】:

      我不熟悉 .NET 脚手架,但我可以告诉你 bash 不是你的问题。我相信从“用户 ID”中删除空间时遇到的错误是不相关的,并且空间按预期工作。相反,您会收到无法识别 SqlServer 命令的错误。这可能是因为它没有安装或路径/权限设置不正确。

      https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer/

      【讨论】:

      • 是的,我同意 bash 在这里不是问题,这是 EF 以及它如何从 bash 解析连接字符串的问题。这个确切的命令在 Windows 机器上运行良好,所以我的意思是必须有一些解决方法才能在 bash 中完成这项任务。
      • 相反,这可能与 SqlServer 未在该 linux 机器上正确设置有关。
      • SqlServer 正在同一网络中的另一台 Windows 机器上运行。我按照官方指南:docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet
      • 尝试在字符串末尾添加分号:"Server=192.168.1.5\MSSQLSERVER2017;Database=TestDb;User Id=test;Password=test@987;"
      • 仍然得到相同的输出。
      猜你喜欢
      • 2018-03-06
      • 2021-12-26
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2020-04-07
      • 2020-02-19
      相关资源
      最近更新 更多