c# - MissingMethodException DbSet.ToList 异常

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

在我的 Entity Framework Core 项目中,我有一个带有 GetAll() 方法的通用存储库

public ICollection<Entity> GetAll(){
    return DbSet.ToList();
}

但是当我执行它时,会抛出以下内容:

System.MissingMethodException was unhandled
  HResult=-2146233069
  Message=Method not found: 'Void Microsoft.EntityFrameworkCore.Query.QueryContextFactory..ctor(Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager, Microsoft.EntityFrameworkCore.Internal.IConcurrencyDetector, Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IChangeDetector)'.
  Source=Microsoft.EntityFrameworkCore.Relational
  StackTrace:
       at Microsoft.EntityFrameworkCore.Query.Internal.RelationalQueryContextFactory..ctor(IStateManager stateManager, IConcurrencyDetector concurrencyDetector, IRelationalConnection connection, IChangeDetector changeDetector)
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
       at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
       at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider)
       at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
       at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
       at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServiceCollectionExtensions.<>c.<AddQuery>b__1_1(IServiceProvider p)
       at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
       at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
       at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
       at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
       at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
       at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider)
       at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider)
       at Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService[TService](IInfrastructure`1 accessor)
       at Microsoft.EntityFrameworkCore.DbContext.get_QueryProvider()
       at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.<.ctor>b__3_0()
       at Microsoft.EntityFrameworkCore.Internal.LazyRef`1.get_Value()
       at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.System.Collections.Generic.IEnumerable<TEntity>.GetEnumerator()
       at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
       at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
       at DataAccessLayer.Repositories.BaseRepository`1.GetAll() in D:\TFS-LocalVersions\tourstop\Service\Musical.Broccoli.API\src\DataAccessLayer\Repositories\BaseRepository.cs:line 30
       at Testing.Program.Main(String[] args) in D:\TFS-LocalVersions\tourstop\Service\Musical.Broccoli.API\Testing\Program.cs:line 40
  InnerException

正在注入(inject) DbContext,我可以添加注册表,但不能执行 ToList()。

我的 DbContext

public class Context : DbContext
{
    public Context(DbContextOptions<Context> options) : base(options) { }
    public DbSet<Entity> Addresses { get; set; }

存储库构造函数:

public BaseRepository(Context context)
    {
        this.Context = context;
        this.DbSet = this.Context.Set<Entity>();
    }

并且正在使用默认的 DI 注入(inject)

project.json 如下:

{
  "version": "1.0.0-*",

  "dependencies": {
    "MySql.Data.EntityFrameworkCore": "7.0.6-IR31",
    "MySql.Data": "7.0.6-IR31",
    "Common": "1.0.0-*",
    "Microsoft.EntityFrameworkCore": "1.1.0",
    "NETStandard.Library": "1.6.1"
  },

  "frameworks": {
    "netstandard1.6": {
      "imports": "dnxcore50"
    }
  }
}

有人知道为什么以及如何解决吗?

最佳答案

尝试删除 “Microsoft.EntityFrameworkCore”:“1.1.0” 来自 project.json

关于c# - MissingMethodException DbSet.ToList 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40729718/

相关文章:

c# - 如何使用 Entity Framework Core 进行全文搜索?

c# - Angular 7 无法使用 c#.net core api 下载文件

c# - Entity Framework Core 中的 ObjectStateManager.ObjectStateManagerChanged

c# - 允许一次只调用一个实例的异步方法

c# - 仅从 Threading.Timer 调用方法一次

c# - .NET 控制台应用命令行文件参数解析

angular - 当我刷新页面时,我只看到最后一个 JSON 文件而不是 View

c# - 使用 EPPlus 从 excel 中获取所有单元格值

c# - EF Core DatabaseGeneratedOption.Computed 不工作

entity-framework - Entity Framework 5.0 First 或 Group By Issue - 从 2.2 升级到 5.0 之后