System.IO.FileNotFoundException при создании миграций EF в ядре .net - PullRequest
7 голосов
/ 19 октября 2019

У меня есть проект .NET Core 2.2, и я пытаюсь настроить миграцию EF.

При запуске:

dotnet ef migrations добавить init --verbose

Я получаю следующие ошибки:

Поиск служб времени разработки для поставщика 'Microsoft.EntityFrameworkCore.SqlServer' ... Использование служб времени разработки от поставщика 'Microsoft.EntityFrameworkCore.SqlServer». Поиск сервисов времени разработки, на которые ссылается сборка myproject-api. Никаких ссылок на услуги времени разработки не найдено. Поиск реализаций IDesignTimeServices в сборке «myproject-api» ... Службы времени разработки не найдены. System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'myproject, Culture = нейтральный, PublicKeyToken = null'. Система не может найти указанный файл.

Это мой файл csproj:

<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>

Редактировать, вот мой 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>();

}

Ответы [ 3 ]

4 голосов
/ 25 октября 2019

Try;

Добавление имени контекста в конструктор параметров.

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

Команда миграции.

Add-Migration MyMig -Context MyDbContext

и установите пакет «Microsoft.EntityFrameworkCore.SqlServer» на уровне «myproject-api», если он не установлен.

2 голосов
/ 25 октября 2019

Вам нужно начать настраивать контекст базы данных

public class MyDbContext : DbContext
{
    public DbSet<MyEntity> Entities { get; set; }

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

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // Apply configurations
    }
}

и настроить sqlserver в Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}

Как я уже упоминал в комментариях, чем вынеобходимо запустить миграцию и указать контекст:

$ dotnet ef migrations add init --context MyDbContext

Дополнительно вы также можете определить начальный проект --startup-project и выходной каталог --output-dir

2 голосов
/ 25 октября 2019

Разрешение времени разработки EF Core в значительной степени основано на соглашениях по присвоению имен и наличии вашей конфигурации в нужном месте. Ваш класс Program выглядит правильно, хотя.

Можете ли вы проверить, выглядит ли ваш класс запуска аналогично этому и имеет ли необходимый вызов AddDbContext в методе ConfigureServices?

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")));
    }
}
...