3
votes

I want to create a console application with EF Core by following this tutorial: http://ef.readthedocs.io/en/latest/platforms/full-dotnet/new-db.html.

My problem is, I cannot execute the statement

Add-Migration 

as described in the tutorials. It shows me:

PM> Add-Migration MyFirstMigration
Cannot execute this command because 'Microsoft.EntityFrameworkCore.Tools' is not installed in project 'src\AppEf'. Add 'Microsoft.EntityFrameworkCore.Tools' to the 'tools' section in project.json. See http://go.microsoft.com/fwlink/?LinkId=798221 for more details.

All added assemblies:

enter image description here

What is wrong?

Update

The statement dotnet restore works and dotnet-ef --help does not work at all.
enter image description here

And you can see, the statement is execute in project folder.

2
According to your screenshot you have Microsoft.EntityFrameworkCore.Tools listed under dependencies in project.json. What the message is telling you is it needs to be under tools. (It probably should be in both places - not sure I'm still in the process of migrating to RTM.)David
So what do I have to do?softshipper
You need to edit the project.json. Add a "tools" object/section and add "Microsoft.EntityFrameworkCore.Tools" to it.David
I did it and try to compile and it shows me Could not find a part of the path 'C:\Users\user\.nuget\packages\.tools\Microsoft.EntityFrameworkCore.SqlServer'.softshipper
That sounds like a syntax error in your project.json (if so most likely a missing or extraneous comma)? What does Solution Explorer look like now?David

2 Answers

7
votes

As a few people mentioned in the comments, Microsoft.EntityFrameworkCore.Tools needs to be added to the tools section of project.json.

I've tested this project.json with the latest (July 2016) versions of EF Core and the tooling packages, and it works:

{
    "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
    "Microsoft.EntityFrameworkCore.Design": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0"
    }
  },
  "frameworks": {
    "netcoreapp1.0": {}
  },
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },
  "version": "1.0.0-*"
}

To use it, execute these commands from inside the project folder:

λ dotnet restore
log  : Restore completed in 2810ms.

λ dotnet ef --help
Compiling EfCoreTester2 for .NETCoreApp,Version=v1.0                                                                            
Compilation succeeded.                                                                                                          
    0 Warning(s)                                                                                                                
    0 Error(s)                                                                                                                  
Time elapsed 00:00:01.7208394                                                                                                   

Entity Framework .NET Core CLI Commands 1.0.0-preview2-21431
Usage: dotnet ef [options] [command]
Options:
  -h|--help                      Show help information
  -v|--verbose                   Enable verbose output
  --version                      Show version information
(... etc)

At first, I was getting No executable found matching command "dotnet-ef" until I realized that you have to execute the commands from inside the project folder (src\projectName in my case). If you try to do it from the solution root directory, it won't work.

1
votes

I ended up with such package configuration

"dependencies": {
  "Microsoft.NETCore.App": {
    "version": "1.0.1",
    "type": "platform"
  },
  "Microsoft.EntityFrameworkCore.Design": "1.0.1",
  "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1",
  ...
}

"tools": {
  "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview3-final",
  "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview3-final"
},

and this command works

Scaffold-DbContext
    "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=<DB name>;Integrated Security=True;"
    "Microsoft.EntityFrameworkCore.SqlServer"
    -OutputDir Entities
    -Context "ApplicationDbContext"
    -DataAnnotations
    -Force
    -Project <Project name>.Data
    -StartupProject <Project name>.Api

Here I scaffold a context into a separate class library project with name Data where the web app is Api