# 2.1: Add Migration and Database

## Referencing Entity Framework Core CLI Tool

Now we will add a package to allow us to use Entity Framework Core and run migrations with the CLI.

In your terminal - navigate to `EFConnect.Data` and run the following commands to update the `EFConnect.Data.csproj` file:

```
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools.DotNet
```

Ensure your updated `EFConnect.Data.csproj` file roughly matches the following (versions of packages may be different:

```markup
<ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.0" />
</ItemGroup>

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />
</ItemGroup>
```

Restore your packages:

```
dotnet restore
```

**Note:** you *may* get strange error messages about a downgraded version:

`error NU1605: EFConnect.Data -> Microsoft.EntityFrameworkCore.Tools.DotNet 2.0.2 -> Microsoft.NETCore.App (>= 2.0.6`

If that's the case, specify the `RuntimeFrameworkVersion` to match the error (in this case 2.0.6:

```markup
<PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <RuntimeFrameworkVersion>2.0.6</RuntimeFrameworkVersion>
</PropertyGroup>
```

Verify that the Entity Framework Core CLI tools were installed correctly:

```
dotnet ef
```

You should get a unicorn some some help information. Feel free to explore that.

```
                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\

Entity Framework Core .NET Command Line Tools 2.0.1-rtm-125

Usage: dotnet ef [options] [command]

Options:
  --version        Show version information
  -h|--help        Show help information
  -v|--verbose     Show verbose output.
  --no-color       Don't colorize output.
  --prefix-output  Prefix output with level.

Commands:
  database    Commands to manage the database.
  dbcontext   Commands to manage DbContext types.
  migrations  Commands to manage migrations.
```

## Running Our First Migration

Let's run our first migration.

In your `EFConnect.Data` folder, run the following command:

```
dotnet ef migrations add InitialCreate -s "../EFConnect.API/EFConnect.API.csproj"
```

We added an option (`-s`) to tell Entity Framework Core the location of our `Startup` project - since our `.Data` project is separate from our `.API` project.

[This blog post](https://www.dustinhorne.com/post/2017/10/27/deeper-dive-into-ef-core-2-part-1) provided a solution to the above problem. Read it if you would like to understand in-depth.

## Creating Our Database

To create our database (or to update the database with a migration in the future) we'll run this command:

```
dotnet ef database update -s "../EFConnect.API/EFConnect.API.csproj"
```

We won't run it now, but it's good to have this command in your back pocket incase you run into issues.

This removes the latest migration:

```
dotnet ef migrations remove -s "../EFConnect.API/EFConnect.API.csproj"
```
