我构建了一个控制台项目,并首先使用代码将模型映射到数据库。当我运行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.Tools
5.0.0-preview.8.20407.4
- Microsoft.EntityFrameworkCore.Design
5.0.0-preview.8.20407.4
- Microsoft.EntityFrameworkCore.SqlServer
3.1.8
记下使用的不同版本。 为了纠正这个问题,我卸载了软件包的preview
版本并安装了最新的稳定版本。
- Microsoft.EntityFrameworkCore.Tools
3.1.8
- Microsoft.EntityFrameworkCore.Design
3.1.8
- Microsoft.EntityFrameworkCore.SqlServer
3.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"子句的软件包。
使用以下命令:
- 在您的项目中登记已安装的软件包-
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
- 卸载不稳定的软件包 -
PM> Uninstall-Package Microsoft.EntityFrameworkCore.Tools
- 重新安装软件包(不带 -pre( -
PM> Install-Package Microsoft.EntityFrameworkCore.Tools
- 然后再次添加迁移 -
PM> Add-Migration InitialMigration
我也刚刚遇到了这个问题。事实证明,我不小心安装了Microsoft.EntityFrameworkCore.SqlServer
和Microsoft.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