Инструменты EF Core по ошибке при создании миграции - PullRequest
0 голосов
/ 10 октября 2018

Я экспериментирую с решением из 3 проектов:

  • WebApi .net core 2.1 - Test.Api
  • Библиотека классов .net core 2.1 Целевая среда - Test.Data
  • Библиотека классов .net core 2.1 Target Framework - Test.Model

В Test.Data я создал класс контекста, класс DbInizializer, репозиторий, ... В Test.Model Iсоздал мои сущности

В Test.Api я хочу создать миграцию и установил этот пакет:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

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

  <ItemGroup>
    <PackageReference Include="AutoMapper" Version="7.0.1" />
    <PackageReference Include="AutoMapper.Data" Version="2.0.0" />
    <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="5.0.1" />
    <PackageReference Include="FluentValidation" Version="8.0.100" />
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.4">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>

  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Test.Data\Test.Data.csproj" />
    <ProjectReference Include="..\Test.Model\Test.Model.csproj" />
  </ItemGroup>

</Project>

В Startup.cs добавьте этот код

services.AddDbContext<TestContext>(options =>                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
                b => b.MigrationsAssembly("Test.Api")));

Iсоздайте также этот класс "DesignTimeDbContextFactory"

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<TestContext>
{
    public TestContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();

        var builder = new DbContextOptionsBuilder<TestContext>();

        var connectionString = configuration.GetConnectionString("DefaultConnection");
        //configuration["Data:Products:ConnectionString"];
            //

        builder.UseSqlServer(connectionString);

        return new TimeShareContext(builder.Options);
    }
}

Когда я запускаю этот

dotnet ef migrations add "InitialCreate" -o "Data\Migrations"

Получите этот

Версия инструментов EF Core '2.1.3-rtm-32065'старше, чем у среды выполнения' 2.1.4-rtm-31024 '.Обновите инструменты для последних функций и исправлений ошибок.Ваш целевой проект "Test.Api" не соответствует вашей сборке миграции "Test.Data".Либо измените целевой проект, либо измените сборку миграции.

Измените сборку миграции с помощью DbContextOptionsBuilder.Например, options.UseSqlServer (connection, b => b.MigrationsAssembly ("Test.Api")).По умолчанию сборка миграции является сборкой, содержащей DbContext.Измените целевой проект на проект миграции с помощью раскрывающегося списка проекта консоли диспетчера пакетов по умолчанию или выполнив «dotnet ef» из каталога, содержащего проект миграции.

Я выполнил все обновления пакета.

Я не понимаю, потому что не работает.

BR

1 Ответ

0 голосов
/ 17 октября 2018

Вы должны ссылаться на инструменты EF и создать свой сценарий миграции в своем проекте, где находится ваш контекст EF - то есть Test.Data.

У меня было то же сообщение об ошибке при жалобе на несоответствие версий, и эта ссылка привела меня к решению.

выполните следующую команду:

Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.1.4
...