efcore icon indicating copy to clipboard operation
efcore copied to clipboard

dotnet ef dbcontext scaffold doesn't respect -d option

Open saxmaster79 opened this issue 3 years ago • 7 comments

Include your code

dotnet ef dbcontext scaffold "Server=myserver;Database=mydb;Trusted_Connection=True;User ID=xyz;Password=123;Integrated Security=False;" Microsoft.EntityFrameworkCore.SqlServer -d --context "ReportsContext" -o "Model/Reports" -f -t Table1 -t Table2

Result: Fluent API is used to configure the model instead of attributes.

This works:

dotnet ef dbcontext scaffold "Server=myserver;Database=mydb;Trusted_Connection=True;User ID=xyz;Password=123;Integrated Security=False;" Microsoft.EntityFrameworkCore.SqlServer --data-annotations --context "ReportsContext" -o "Model/Reports" -f -t Table1 -t Table2

Result: Works as expected. Attributes are used to configure the model.

Include provider and version information

EF Core version: Entity Framework Core .NET Command-line Tools 6.0.0 Database provider: Microsoft.EntityFrameworkCore.SqlServer Target framework: .NET 6.0 Operating system: Windows 10 IDE: Command line

saxmaster79 avatar Nov 15 '21 12:11 saxmaster79

Looks like -d is used by dotnet for "Enable diagnostic output."

PS C:\local\code\AllTogetherNow\SixOh> dotnet --help   
.NET SDK (6.0.100)
Usage: dotnet [runtime-options] [path-to-application] [arguments]

Execute a .NET application.

runtime-options:
  --additionalprobingpath <path>   Path containing probing policy and assemblies to probe for.
  --additional-deps <path>         Path to additional deps.json file.
  --depsfile                       Path to <application>.deps.json file.
  --fx-version <version>           Version of the installed Shared Framework to use to run the application.
  --roll-forward <setting>         Roll forward to framework version  (LatestPatch, Minor, LatestMinor, Major, LatestMajor, Disable).
  --runtimeconfig                  Path to <application>.runtimeconfig.json file.

path-to-application:
  The path to an application .dll file to execute.

Usage: dotnet [sdk-options] [command] [command-options] [arguments]

Execute a .NET SDK command.

sdk-options:
  -d|--diagnostics  Enable diagnostic output.
  -h|--help         Show command line help.
  --info            Display .NET information.
  --list-runtimes   Display the installed runtimes.
  --list-sdks       Display the installed SDKs.
  --version         Display .NET SDK version in use.

SDK commands:
  add               Add a package or reference to a .NET project.
  build             Build a .NET project.
  build-server      Interact with servers started by a build.
  clean             Clean build outputs of a .NET project.
  format            Apply style preferences to a project or solution.
  help              Show command line help.
  list              List project references of a .NET project.
  msbuild           Run Microsoft Build Engine (MSBuild) commands.
  new               Create a new .NET project or file.
  nuget             Provides additional NuGet commands.
  pack              Create a NuGet package.
  publish           Publish a .NET project for deployment.
  remove            Remove a package or reference from a .NET project.
  restore           Restore dependencies specified in a .NET project.
  run               Build and run a .NET project output.
  sdk               Manage .NET SDK installation.
  sln               Modify Visual Studio solution files.
  store             Store the specified assemblies in the runtime package store.
  test              Run unit tests using the test runner specified in a .NET project.
  tool              Install or manage tools that extend the .NET experience.
  vstest            Run Microsoft Test Engine (VSTest) commands.
  workload          Manage optional workloads.

Additional commands from bundled tools:
  dev-certs         Create and manage development certificates.
  fsi               Start F# Interactive / execute F# scripts.
  sql-cache         SQL Server cache command-line tools.
  user-secrets      Manage development user secrets.
  watch             Start a file watcher that runs a command when files change.

Run 'dotnet [command] --help' for more information on a command.

ajcvickers avatar Nov 16 '21 22:11 ajcvickers

I think that -d might need to be replaced with -D so that way it does not conflict with diagnostic output.

AraHaan avatar Mar 06 '22 06:03 AraHaan

Any plans to change this before 8.0.0?

Also note: It seems that efcore also ignores assemblies in runtimeconfig listed frameworks and then fails to load some of them from custom frameworks when scaffolding.

AraHaan avatar Jul 29 '22 08:07 AraHaan

@ajcvickers It looks like the CLI team broke us (and any other tool that was using -d) in 6.0 (probably in https://github.com/dotnet/sdk/commit/938a4048e534fb5abad2ba0b901c1884c202b917). Should we follow up with them?

bricelam avatar Sep 08 '22 18:09 bricelam

@bricelam Let's discuss in triage.

ajcvickers avatar Sep 08 '22 19:09 ajcvickers

Note from triage: Change the short form of the flag to -a or similar.

ajcvickers avatar Sep 09 '22 18:09 ajcvickers

I approve the change to the short form because it would fix the bug and also remain the same number of characters.

AraHaan avatar Sep 10 '22 05:09 AraHaan

Please remove the -d from the documentation of version 6.x. Online (https://learn.microsoft.com/en-us/ef/core/cli/dotnet) as well as CLI help. It is still part of 6.0.9 CLI.

hmundle avatar Oct 04 '22 09:10 hmundle

Filed https://github.com/dotnet/sdk/issues/29839

bricelam avatar Jan 09 '23 22:01 bricelam

Note to self: test when the first preview is released and update docs.

ajcvickers avatar Dec 14 '23 17:12 ajcvickers

@saxmaster79 @AraHaan When I attempted to repro this on .NET 8 with EF8 the -d option, it works fine. So I plan to revert this unless you report back that it is still broken.

ajcvickers avatar Mar 07 '24 08:03 ajcvickers