您的目标项目“ XXX”未引用EntityFramework。此包装是必需的

时间:2019-12-16 14:52:35

标签: sqlite entity-framework-core ef-core-3.0

谁能指出我错了的方向。我试图通过SQLite(Console App .NET Core 3.1)在EFCore上进行迁移

运行任何命令(例如enable-migrations或update-database)都会给出错误;

您的目标项目“ XXX”未引用EntityFramework。该软件包供实体框架核心工具使用。确保您的目标项目正确,安装软件包,然后重试。

如果我使用EFCore,似乎需要EntityFramework有点奇怪吗?

 <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="3.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>

3 个答案:

答案 0 :(得分:4)

还有一种方法可以做到这一点:

我们需要使用 DbContext 的工厂来在设计时创建迁移。

我们实现了 IDesignTimeDbContextFactory 接口,因为按照惯例,当在 DbContext 同一个项目或启动项目中发现实现了这个接口的类时,EFCore 会放弃其他创建 DbContext 的方式,将使用工厂。

查看实现示例:

  public class MyDbContextFactory : IDesignTimeDbContextFactory<MyDbContext>
  {

    public MyDbContext CreateDbContext(string[] args)
    {
      var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();

      optionsBuilder.UseSqlServer("Your ConnectionString Here");

      return new MyDbContext(optionsBuilder.Options);
    }

执行此操作后,将包含 DbContext 的项目设置为启动和默认项目并尝试创建迁移:

//.Net Core CLI:
dotnet ef migrations Add Initial -p .\src\Data\Data.csproj -s .\src\Data\Data.csproj

//Package Manager Console
Add-Migration Initial -p .\src\Data\Data.csproj -s .\src\Data\Data.csproj

答案 1 :(得分:3)

就我而言,我遇到了同样的异常,因为我安装了 EntityFrameWork 包和 EntityFrameWorkCore。我将后者用于我的库中执行 SqlCommand 的一些较旧的函数。

即使在我删除了 EntityFramework 包之后,安装这两个包也完全清理了我的项目。 Michael Browns 的评论给了我一个提示,因为我最终不得不按照以下建议完全重置我的 EntityFramework Migrations: Reset Entity Framework

答案 2 :(得分:1)

嗯,这是一个奇怪的解决方案,令我惊讶的是它起作用了!

只需从VS安装程序更新Visual Studio并重新启动即可。这将删除所有不必要的软件包,然后重新安装软件包将解决您的EF和EF核心软件包冲突。然后运行您的迁移,您将看到错误将消失。

希望这会有所帮助。