使用Pomelo MySQL EF提供程序与ASP.NET Core 2.0 Preview的错误

问题描述:

我在ASP.NET Core 2.0 Preview上使用Pomelo 1.1.2以及EF 2.0 Preview。在他们的演示代码,每次都遇到我称之为“UseMySql”时以下异常:使用Pomelo MySQL EF提供程序与ASP.NET Core 2.0 Preview的错误

System.TypeLoadException occurred 
    HResult=0x80131522 
    Message=Method 'Clone' in type 'Microsoft.EntityFrameworkCore.Internal.MySqlOptionsExtension' from assembly 'Pomelo.EntityFrameworkCore.MySql, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null' does not have an implementation. 
    Source=<Cannot evaluate the exception source> 
    StackTrace: 
    at Microsoft.EntityFrameworkCore.MySqlDbContextOptionsExtensions.UseMySql(DbContextOptionsBuilder optionsBuilder, String connectionString, Action`1 mySqlOptionsAction) 
    at CoreTest1.Startup.<ConfigureServices>b__4_0(DbContextOptionsBuilder options) in C:\DEV\Experiments\CoreTest1\CoreTest1\Startup.cs:line 27 
    at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass0_0`1.<AddDbContext>b__0(IServiceProvider p, DbContextOptionsBuilder b) 
    at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.DbContextOptionsFactory[TContext](IServiceProvider applicationServiceProvider, Action`2 optionsAction) 
    at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass5_0`1.<AddCoreServices>b__0(IServiceProvider p) 
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactoryService(FactoryService factoryService, ServiceProvider provider) 
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument) 
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider) 
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProvider provider) 
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument) 
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider) 
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument) 
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider) 
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument) 
    at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass17_0.<RealizeService>b__0(ServiceProvider provider) 
    at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType) 
    at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider) 
    at CoreTest1.Controllers.HomeController.Index() in C:\DEV\Experiments\CoreTest1\CoreTest1\Controllers\HomeController.cs:line 18 
    at Microsoft.AspNetCore.Mvc.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters) 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__18.MoveNext() 

想知道这是因为2.0预览库的公正?有任何想法吗?我试图在Git上查看它们的源代码,看看我能否立即发现任何错误,但不能。

+0

2.0描述是一个重要的版本,主要版本通常在API重大更改。所以,不要指望由EF Core 1.1编写的提供者能够在2.x上工作。常识;) – Tseng

+1

通常我会同意,但2.0最近从1.2更名为了突出它与.NET标准2.0兼容。我不太确定这有多大的突破,2.0这里更像是一个营销头衔。 –

让我们来看看EF核2.0预览1 announcement

如果您使用的是第三方数据库提供商,然后检查,看看他们是否已经发布这取决于2.0.0-preview1决赛的更新。如果他们有,那么只需升级到新版本。如果不是这样,那么2.0版本将包含多个重大更改,并且不会升级1. *提供程序。

这意味着柚预计不会支持EF核心2.0直到comparatible release 被产生。

最近,在我的项目更新到.NET Core 2.0期间面临同样的错误。这时,解决方案在https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql 基本上,更新包的prereleased版本2.0.0 RC-*

<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.0.0-rc-*" /> 
+0

我发现的那个是''这就解决了这个问题。 –