使用实体框架核心添加迁移时出现错误



我构建了一个控制台项目,并首先使用代码将模型映射到数据库。当我运行Add-Migration InitialMigration的命令时,出现错误:

类型"Microsoft.EntityFrameworkCore.SqlServer.Query.Internal.SqlServerSqlTranslatingExpressionVisitorFactory"中的方法"创建"来自程序集"Microsoft.EntityFrameworkCore.SqlServer, Version=3.1.5.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' 没有实现。

DbContext是:

class ActorDbContext : DbContext
{
public DbSet<Actor> Actors { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(
@"Server=(localdb)mssqllocaldb;Database=ActorDb;"
+ "Trusted_Connection=True;");
}
}

该实体是:

public class Actor
{
public int Id { get; set; }
public String Name { get; set; }
public int Age { get; set; }
public bool AcademyWinner { get; set; }
}

我只是在使用VS for Mac时遇到了同样的问题。 我的问题是我安装了以下版本的软件包:

  • Microsoft.EntityFrameworkCore.Tools5.0.0-preview.8.20407.4
  • Microsoft.EntityFrameworkCore.Design5.0.0-preview.8.20407.4
  • Microsoft.EntityFrameworkCore.SqlServer3.1.8

记下使用的不同版本。 为了纠正这个问题,我卸载了软件包的preview版本并安装了最新的稳定版本。

  • Microsoft.EntityFrameworkCore.Tools3.1.8
  • Microsoft.EntityFrameworkCore.Design3.1.8
  • Microsoft.EntityFrameworkCore.SqlServer3.1.8

再次记下所有 3 个软件包的版本。 一旦我安装了每个软件包的正确版本,问题就解决了,我的Add-Migration工作了。

必须包含以下所有包才能具有相同的版本:

Microsoft.EntityFrameworkCore
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.SqlServer

我试过了,它运行良好。

我正在补充[穆罕默德-阿卜杜勒瓦哈卜][1]的答案 以下软件包需要最新更新:

Microsoft.EntityFrameworkCore
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.SqlServer

为此,右键单击项目 --> 管理 Nuget 包 --> 单击更新,然后逐个更新所有内容,如果不存在,则添加,如下所示

PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer
PM> Install-Package Microsoft.EntityFrameworkCore.Tools
PM> Add-Migration InitialMigration

祝你好运:)

也许您正在尝试混合不同的版本。确保所有版本都对齐。

尝试将 SqlServer 更改为最新版本(5.0.0(,我运行到完全相同的错误,一旦我更新到最新版本,它运行良好。

我在做一个旧教程时遇到了同样的问题。问题是我安装了一个带有"-pre"子句的软件包。

使用以下命令:

  1. 在您的项目中登记已安装的软件包-
PM> Get-Package -ProjectName <YourProjectName>

输出:

Id                                  Versions                                 ProjectName                     
--                                  --------                                 -----------                     
Microsoft.EntityFrameworkCore.Tools {5.0.0-rc.2.20475.6}                     FirstEFCoreProject              
Microsoft.EntityFrameworkCore.Sq... {3.1.9}                                  FirstEFCoreProject   
  1. 卸载不稳定的软件包 -
PM> Uninstall-Package Microsoft.EntityFrameworkCore.Tools
  1. 重新安装软件包(不带 -pre( -
PM> Install-Package Microsoft.EntityFrameworkCore.Tools
  1. 然后再次添加迁移 -
PM> Add-Migration InitialMigration

我也刚刚遇到了这个问题。事实证明,我不小心安装了Microsoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.Sqlite

我真的只需要Sqlite,所以我删除了对SqlServer的引用。然后我不得不修复几个引用 SqlServer 的地方,而不是 Sqlite,我错过了,现在错误消失了。

在 NuGet 中运行后修复了这 2 行

添加迁移初始

然后

更新数据库

> .NET Core 6.0.8Microsoft.EntityFrameworkCore的版本对于所有包都应相同

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.8">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.8" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

错误随之而来

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.0-preview.7.22376.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.8">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.8" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

如果同时安装了 EFCore 和 EFFramework,并且要使用框架迁移命令,则应显式指定要使用 EFFramework 迁移命令,而不是这些命令的 EFCore 版本

EntityFramework6Update-Database

EntityFramework6Add-Migration

最新更新