【问题标题】:EF Core: Method 'ProcessModelFinalized' does not have implementationEF Core:方法“ProcessModelFinalized”没有实现
【发布时间】:2020-07-01 23:29:57
【问题描述】:

我在尝试使用实体框架核心获取 DbContext 对象中的 DbSet 信息时遇到错误。

我的 DbContext 对象是这样的:

public class CatalogueContext : DbContext
{
    public DbSet<ConnectorCatalogueItemConv> CatalogueItemConvs { get; set; }

    public CatalogueContext(DbContextOptions<CatalogueContext> options)
        : base(options)
    {

    }

    public CatalogueContext()
    {

    }
}

我正在尝试通过调用一个接收泛型类型 T 的方法来实例化上下文,该泛型类型 T 这样可能是 DbContext 的子类:

public T GetContext<T>() where T: DbContext, new()
{
    var optionsBuilder = new DbContextOptionsBuilder<T>();
    var connectionString = Configuration.GetConnectionString(ExternalTablesKey);
    optionsBuilder.UseSqlServer(connectionString);
    return Activator.CreateInstance(typeof(T), optionsBuilder.Options) as T;
}

使用 Microsoft.Extensions.Configuration 正确获取了连接字符串,因此问题不存在。

最后,我调用此方法并尝试获取 DbSet 上的任何记录,声明如下:

 public void SomeMethod()
 {
     using (var db = this.GetContext<CatalogueContext>())
     {
         var val = db.CatalogueItemConvs.ToList(); //Here is where I get the error below.
     }
 }

显示的错误是:

类型中的方法“ProcessModelFinalized” 'Microsoft.EntityFrameworkCore.Metadata.Conventions.SqlServerValueGenerationStrategyConvention' 从程序集'Microsoft.EntityFrameworkCore.SqlServer, 版本=3.0.0.0,文化=中性,PublicKeyToken=adb9793829ddae60' 没有实现。'

我到处搜索,但似乎关于这个错误的信息很少。有什么想法吗?

编辑 1: 我的解决方案包括版本 3.0.0.0 中的 Microsoft.EntityFrameworkCore.SqlServer

编辑 2: 根据要求,我编辑了代码以仅包含一个实体及其类声明。此时没有映射。

public class ConnectorCatalogueItemConv
{
    public string CodConnector { get; set; }
    public string CodCatalogue { get; set; }
    public string CodItemCia { get; set; }
    public string CodItemInbk { get; set; }
    public bool Defaultvalue { get; set; }
}

编辑 3: How to instantiate a DbContext in EF Core

【问题讨论】:

  • 请播下实体类和自定义映射代码(如果有的话)。
  • 我根据您的请求添加了新的编辑。正如我所说,没有映射。此时,我只想检索 DbSet 上一个表的内容。提前致谢。
  • 我想知道为什么 EF 不抱怨 ConnectorCatalogueItemConv 没有 key 属性。
  • 至少在我标记异常之前 EF 没有抱怨任何事情。在我达到那个点之前似乎还不错。
  • 嗯,这一切都表明您没有获得一致的 NuGet 包集合。尝试(重新)安装最新的Microsoft.EntityFrameworkCore.SqlServer 包。

标签: c# asp.net-core entity-framework-core


【解决方案1】:

我也遇到了同样的错误,我已经将我的 Microsoft.EntityFrameworkCore.SqlServer 和 Microsoft.EntityFrameworkCore.Tools 更新到了 5.0 版,然后它就可以工作了,

【讨论】:

  • 优秀的答案!这解决了我的问题。非常感谢,我已标记为正确答案。
  • 当我将“Microsoft.EntityFrameworkCore.SqlServer”从 3.1.10 更新到 5.0 时,发生了一些奇怪的事情。不能更新吗?
  • 通过使用tutorial,我将“TargetFramework”从“netcoreapp3.1”更改为“net5.0”,数据包更新顺利,项目构建成功。
  • 我在一个测试项目中安装Microsoft.EntityFrameworkCore.* 包的5.0 版本时遇到了这个错误,而Microsoft.EntityFrameworkCore.InMemory 已经安装了3.x 版本。这为我解决了这个问题。
【解决方案2】:

我的两分钱:如果你想使用 .NET core 3.0 版本而不是升级到 .Net 5.0,那么你需要做的就是确保上面提到的所有包都使用 3.xx 版本而不是5.xx我注意到,当您尝试构建身份页面时,它会安装自最新版本以来的 5.x.x 版本的软件包,而不是检查软件包的 .net 核心版本并安装适当的版本。

【讨论】:

  • 这实际上是正确的答案,如果您使用的是 EntityFrameworkCore,请确保您所有的相关包都在同一版本上。这就是错误消息的含义,它找不到该方法的正确版本的实现。所以降级不是办法
【解决方案3】:

如果您在测试项目中遇到同样的问题并且您正在使用 Microsoft.EntityFrameworkCore.InMemory,您可以通过安装版本 v3.1.10

来修复此错误

【讨论】:

    【解决方案4】:

    我使用 Microsoft.EntityFrameworkCore.InMemory v3.1.10Xunit v2.4.1 进行测试,并在播种上下文时弹出以下错误:

    System.TypeLoadException:来自程序集“Microsoft.EntityFrameworkCore.InMemory,版本=3.1.10.0,文化=中性,PublicKeyToken=adb9793829ddae60”的“Microsoft.EntityFrameworkCore.InMemory.Storage.Internal.InMemoryTransactionManager”类型中的“方法“CommitTransactionAsync”没有实现。'

    将我所有的 Microsoft.EntityFrameworkCore 包更新到 v5.0.0 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 2017-06-27
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      相关资源
      最近更新 更多