C# MissingMethodException DbSet.ToList
在我的EntityFramework核心项目中,我有一个带有C# MissingMethodException DbSet.ToList,c#,asp.net-core,entity-framework-core,.net-core,C#,Asp.net Core,Entity Framework Core,.net Core,在我的EntityFramework核心项目中,我有一个带有GetAll()方法的通用存储库 public ICollection<Entity> GetAll(){ return DbSet.ToList(); } 存储库构造函数: public BaseRepository(Context context) { this.Context = context; this.DbSet = this.Context.Set<Ent
GetAll()
方法的通用存储库
public ICollection<Entity> GetAll(){
return DbSet.ToList();
}
存储库构造函数:
public BaseRepository(Context context)
{
this.Context = context;
this.DbSet = this.Context.Set<Entity>();
}
有人知道原因和解决方法吗?假设您的上下文如下所示:
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
{
"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"
}
}
}
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> options)
: base(options) { }
public DbSet<SomeEntity> SomeEntities { get; set; }
...
您可能需要阅读本教程,以了解有关Entity Framework Core的DbContext的更多信息,并通过它访问您的实体。尝试删除
Microsoft.EntityFrameworkCore:“1.1.0”
从project.json中,您应该显示存储库中的更多代码-我们不知道
DbSet
是什么!我在下面的回答中做了很多假设(也许我不应该回答),但希望仍然有用。对不起,刚刚更新了这个问题,还有,你是如何实现基本存储库的?简单的继承和构造函数重写你记得在派生的repo上调用base吗publicsomerepository(SomeContext-context):base(context){}
thecontext.Set.ToList()
应该可以很好地工作。我从来没有想过这一点,但它可以工作。如果您能解释原因,以供进一步参考,我们将不胜感激。这个问题是依赖注入。已经依赖于ef.core,可能会安装另一个版本的ef.core。删除EntityFrameworkCore后,立即在project.json.lock文件中搜索EntityFrameworkCore,您将看到它仍然存在,但不是1.1.0。至少对我来说是这样。
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> options)
: base(options) { }
public DbSet<SomeEntity> SomeEntities { get; set; }
...
public IList<T> GetAll()
{
return MyContext.Set<T>.ToList();
}