efcore
efcore copied to clipboard
dotnet ef dbcontext scaffold doesn't respect -d option
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
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.
I think that -d might need to be replaced with -D so that way it does not conflict with diagnostic output.
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.
@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 Let's discuss in triage.
Note from triage: Change the short form of the flag to -a or similar.
I approve the change to the short form because it would fix the bug and also remain the same number of characters.
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.
Filed https://github.com/dotnet/sdk/issues/29839
Note to self: test when the first preview is released and update docs.
@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.