使用Entity Framework Core添加迁移时出现错误

时间:2020-07-06 19:34:39

标签: c# entity-framework-core

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

来自程序集'Microsoft.EntityFrameworkCore.SqlServer,版本= 3.1.5.0,区域性=中性,PublicKeyToken = adb9793829ddae60'的类型'Microsoft.EntityFrameworkCore.SqlServer.Query.Internal.SqlServerSqlTranslatingExpressionVisitorFactory'中的方法'Create'没有实现

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; }
}

7 个答案:

答案 0 :(得分:5)

我刚刚使用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正常了。

答案 1 :(得分:3)

您必须包括以下所有相同版本的软件包:

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

我尝试过,它运行良好。

答案 2 :(得分:1)

我正在添加[mohammed-abdelwahab] [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

祝你好运:)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分: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

答案 6 :(得分:0)

我也有这个问题。事实证明,我不小心同时安装了Microsoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.Sqlite

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