2016-11-21 51 views
3

在我的实体框架的核心项目,我已经与GetAll()方法MissingMethodException DbSet.ToList

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 

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

的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" 
    } 
    } 
} 

有人对此有何看法,以及如何解决?

+1

你应该从你的资料库显示更多的代码 - 我们不知道什么'DbSet'是!我在下面的回答中做了很多假设(也许我不应该回答),但是,希望仍然有帮助。 – steamrolla

+1

对不起,刚更新了问题 –

+0

另外,你是如何实现基础知识库的? – steamrolla

回答

3

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

+0

这不会超出我的想法,但它的工作原理。如果你能解释为什么,为进一步参考,将不胜感激。 –

+1

这个问题是依赖注入。 [MySql.Data.EntityFrameworkCore](https://www.nuget.org/packages/MySql.Data.EntityFrameworkCore/7.0.6-IR31)已经依赖于ef.core,并可能安装另一个版本的EF.Core。在删除EntityFrameworkCore后,现在搜索project.json.lock文件,您会发现它仍然存在,但它不是1.1.0。至少我是这样的。 –

1

假设你有一个看起来像下面这样一个背景:

public class MyContext : DbContext 
{ 
    public MyContext(DbContextOptions<MyContext> options) 
     : base(options) { } 

    public DbSet<SomeEntity> SomeEntities { get; set; } 
    ... 

你对这些实体通过通用存储库访问将是这个样子(其中TSomeEntity):

public IList<T> GetAll() 
{ 
    return MyContext.Set<T>.ToList(); 
} 

您可能想要通过本教程here了解更多关于Entity Framework Core的DbContext并通过它访问您的实体。

相关问题