Включение миграции в ядре EF?

Я начинаю работу с EF Core 2.0, у меня есть консольное приложение, предназначенное для .NET 4.6.1. У меня есть очень простой класс модели и этот контекст:

public class ContextCore : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["efCoreCon"].ConnectionString);
    }
    public DbSet<ModelC> Models { get; set; }
}

это строка подключения:

<add name="efCoreCon" connectionString="server=PC-MSHWF\SQLEXPRESS;database=efCoreDB;integrated security=true;" />

Я заметил, что в ядре ef нет команды для Enable-Migrations из официальные документы

поэтому я запускаю Add-migration firstMigration, но получаю эту ошибку:

В сборке NewConsole не найден тип конфигурации миграции. (В Visual Studio вы можете использовать команду Enable-Migrations из консоли диспетчера пакетов, чтобы добавить конфигурацию миграции).

когда я попробовал Enable-Migrations , я получил эту ошибку:

В сборке NewConsole не найден тип контекста.


person mshwf    schedule 01.12.2017    source источник
comment
Вы используете неосновные команды EF. Используйте 1_.   -  person SLaks    schedule 01.12.2017
comment
Каково пространство имен вашего контекста?   -  person Pablo Tondolo de Vargas    schedule 01.12.2017
comment
Простой учебник здесь docs.microsoft.com/en-us /aspnet/core/data/ef-mvc/migrations   -  person Steve    schedule 01.12.2017
comment
@PabloTondolodeVargas NewConsole.EFCore   -  person mshwf    schedule 01.12.2017
comment
Я использовал dotnet ef migrations add InitialCreate , но получил: dotnet : не найден исполняемый файл, соответствующий команде dotnet-ef...   -  person mshwf    schedule 01.12.2017
comment
Вот как установить инструменты EF Core: docs.microsoft.com /en-us/ef/core/miscellaneous/cli/dotnet.   -  person Kirk Larkin    schedule 01.12.2017


Ответы (4)


Перейдите в консоль диспетчера пакетов и установите необходимые инструменты с помощью Install-Package Microsoft.EntityFrameworkCore.Tools. Когда он завершится, попробуйте использовать команду EntityFrameworkCore\Add-Migration firstMigration.

person Stivi C.    schedule 01.12.2017
comment
Для меня было достаточно просто установить пакет и перезапустить Visual Studio, чтобы решить проблему. - person Marco Lackovic; 14.06.2018

в командной строке powershell введите это --› dotnet ef migrations add InitialMigration

Это включает миграцию.введите здесь описание изображения


При этом будут установлены правильные основные инструменты.

// Package Manger
PM> Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.0.1
// or this will work inside the CLI Console
dotnet add package Microsoft.EntityFrameworkCore.Tools --version 2.0.1
// **for the current/LATEST ver. leave out version option it will install latest Install-Package Microsoft.EntityFrameworkCore.Tools 

введите здесь описание изображения


Устранение проблемы с ошибкой:

Посмотрите на этот SO answer: вам просто нужно обновить раздел инструментов вашего файла project.json, чтобы включить это:

"Microsoft.EntityFrameworkCore.Tools": {
  "version": "2.0.1",  // I corrected this from previous answer for your version
  "imports": [
    "portable-net45+win8+dnxcore50",
    "portable-net45+win8"
  ]
}

Бонус :) Для автоматического запуска миграции... в файле startup.cs вашего основного приложения.

// setup the HTTP request pipeline to check and migrate.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{           
    try
    {
        using (var migrationSvcScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
            .CreateScope())
        {
         migrationSvcScope.ServiceProvider.GetService<EFMigrationsMyDBContext>().Database.Migrate();
            // you can also add the data here... let me know if you need I will post it
        }
    }   
    ... // Rest of the startup stuff
}
person Transformer    schedule 01.12.2017

Начиная .NET Core 2 с использованием C# 7.1, вы можете иметь асинхронный метод Main для своего приложения, поэтому вы можете вызывать всю логику инициализации перед запуском хоста, сразу после завершения его сборки:

public class Program
{
  public static async Task Main(string[] args)
  {
    //first build
    var host = CreateHostBuilder(args).Build();

    //initialize
    using (var serviceScope = host.Services.CreateScope())
    {
      var serviceProvider = serviceScope.ServiceProvider;
      var isDevelopment = 
        serviceProvider.GetRequiredService<IWebHostEnvironment>().IsDevelopment();

      using var context = serviceProvider.GetRequiredService<AppDbContext>();


      if (isDevelopment)
        await context.Database.EnsureCreatedAsync();
      else
        await context.Database.MigrateAsync();

      if (isDevelopment)
      {
        using var userManager = 
          serviceProvider.GetRequiredService<UserManager<AppUser>>();
        await userManager
          .CreateAsync(new AppUser { UserName = "dummy", Email = "[email protected]" },
          password: "1234");
      }
    }

    //now run
    host.Run();
  }

  public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
      .ConfigureWebHostDefaults(webBuilder =>
      {
        webBuilder.UseStartup<Startup>();
      });
}
person Shimmy Weitzhandler    schedule 12.04.2020

Отредактируйте файл .csproj там, где у вас есть EF Core 2.0, и добавьте:

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
</ItemGroup>
  1. Откройте Windows PowerShell
  2. Перейдите в каталог, где у вас есть EF Core 2.0.
  3. Введите dotnet ef migrations add <<migration's_name>>. Например: dotnet ef migrations add Init. Если ваш стартовый проект находится в другой папке, вы можете использовать --startup-project ../<<other_project_folder>>
person Pyotreq    schedule 01.12.2017