EF Core工具在创建迁移时出现错误

3
我正在尝试解决三个项目的问题:
  • WebApi .net core 2.1 - Test.Api
  • Class Library .net core 2.1 Target Framework - Test.Data
  • Class Library .net core 2.1 Target Framework - Test.Model
在Test.Data 中,我创建了一个Context类、DbInizializer类、Repository等等。在Test.Model中,我创建了我的实体。
在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")));

我还创建了这个名为“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的程序集。 通过使用Package Manager Console的Default project下拉列表或在包含迁移项目的目录中执行“dotnet ef”来将目标项目更改为迁移项目。

我已经完成了所有包升级。

我不理解为什么不起作用。

敬礼


也许这可以帮助 https://dev59.com/01UK5IYBdhLWcg3wySbB - Maxim Zabolotskikh
我能知道 ef core sql provider 的版本吗? - Nisfan
谢谢。但是现在当我运行 dotnet ef database update 时,我得到了如下信息:未应用迁移。数据库已经是最新的了。为什么呢? - Cicciux
如果有人想查看这个项目,这是链接:https://github.com/mbsFactory/TimeShare - Cicciux
1个回答

5

您需要引用EF工具并在EF上下文所在的项目(即Test.Data)中创建迁移脚本。

我曾经遇到过关于版本不匹配的同样错误信息,这个链接帮助我解决了问题。

运行以下命令:

Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.1.4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接