Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

System.IO.FileNotFoundException when creating EF migrations on .net core

I have a .NET Core 2.2 project and am trying to set up EF migrations.

When running:

dotnet ef migrations add init --verbose

I get the following errors:

Finding design-time services for provider 'Microsoft.EntityFrameworkCore.SqlServer'... Using design-time services from provider 'Microsoft.EntityFrameworkCore.SqlServer'. Finding design-time services referenced by assembly 'myproject-api'. No referenced design-time services were found. Finding IDesignTimeServices implementations in assembly 'myproject-api'... No design-time services were found. System.IO.FileNotFoundException: Could not load file or assembly 'myproject, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.

This is my csproj file:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.4" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.4" />
  </ItemGroup>

</Project>

Edit, here is my Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
          WebHost.CreateDefaultBuilder(args)
            .UseKestrel()
            .UseUrls("http://localhost:5004")
            .UseStartup<Startup>();

}
like image 311
Robbie Mills Avatar asked Oct 18 '19 23:10

Robbie Mills


2 Answers

EF Core's design time resolution heavily relies on naming conventions and having your configuration in the right place. Your Program class looks right though.

Can you check if your Startup class looks similar to this and has the required AddDbContext call in the ConfigureServices method?

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    }
}
like image 60
Redstone Avatar answered Nov 19 '22 11:11

Redstone


Try;

Add context name to options constructor.

 public MyDbContext(DbContextOptions<**MyDbContext**> options)
      : base(options)
    {
    }

Migration command.

Add-Migration MyMig -Context MyDbContext

and install the "Microsoft.EntityFrameworkCore.SqlServer" package on the "myproject-api" layer if it is not installed.

like image 2
anıl yıldırım Avatar answered Nov 19 '22 10:11

anıl yıldırım