【问题标题】:Method EF Core: Method 'Process' does not have implementationnot found方法 EF Core:方法 \'Process\' 没有实现未找到
【发布时间】:2022-10-13 19:07:19
【问题描述】:

我在尝试使用实体框架核心获取 DbContext 对象中的 DbSet 信息时遇到错误。我试图通过调用一个接收泛型类型 T 的方法来实例化上下文,该泛型类型 T 可能是 DbContext 的子级:

我的 DbContext 对象看起来是这样的:

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

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

    }

    public CatalogueContext()
    {

    }
}

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

【问题讨论】:

  • 你能分享从.csproj 导入的包吗?
  • 我刚刚添加了它。你可以检查一下。
  • 在尝试修复它之前,您需要了解此方法的作用 - 或者决定您是否想要它。从这个包的意义上说,没有“批量删除”或“批量更新”。该包的作用是使用 SqlBulkCopy 将数据插入临时表,与主键上的目标连接,并根据需要插入、更新或删除。这适用于少量数据,但如果您经常需要加载大量数据,则必须自己设计临时表,使用适当的索引,并且很可能使用更高级的技术,如分区切换
  • 当您有大量数据时,无论您如何保存数据,像 EF Core 这样的 ORM 只会增加开销。如果您有 100K 行要插入,那么您最不想做的就是将它们全部加载到内存中并跟踪它们。这根本不是 ORM 的用途

标签: entity-framework-core .net-6.0 ef-core-6.0


【解决方案1】:

您的 sqlServerOptions.AddTempTableSupport() 似乎是您的组织创建的自定义扩展方法。此方法调用 Thinktecture 程序集中的方法,但您的应用程序在运行时找不到该方法。

与 MissingMethodException 一样,这意味着您正在针对另一个程序集运行您的应用程序,而不是针对它的一部分进行编译。

确保在任何地方都使用相同的版本。

【讨论】:

  • 如果你用谷歌搜索它,它似乎是一个不幸的命名方法,用于为 SqlBulkCopy 创建临时表以填充批量更新/删除操作。试图“隐藏”复杂性最终会使人们更难理解发生了什么或出了什么问题
  • 我不使用 Google,但“AddTempTableSupport”在 DuckDuckGo 上提供了 4(四)次点击,因此它似乎不是一种广泛使用的方法。
【解决方案2】:

此类错误通常是某些 nuget 版本不匹配的迹象。由于您还没有提供完整的 .csproj 文件,因此很难说具体是哪些文件,但有几个有问题,比如 Microsoft.EntityFrameworkCore.SqlServer 肯定应该升级到 6.x。我假设您还安装了一些软件包 Thinktecture.Something...,因此您需要将它们更新到支持 EF Core 6.x 版本的版本(如果它是来自 pawelgerr 的软件包,那么最新的 4.2.3 版本似乎是合适的) .

【讨论】:

    猜你喜欢
    • 2020-07-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    相关资源
    最近更新 更多