7

Używam Pomelo 1.1.2 na ASP.NET Core 2.0 Preview, wraz z EF 2.0 Preview. Z ich kodu demo, pojawia się następujący wyjątek każdym razem nazywam „UseMySql”:Błędy przy użyciu dostawcy Pomelo MySQL EF z 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() 

Zastanawiasz się, czy jest to tylko dlatego, bibliotek 2,0 podglądu? Jakieś pomysły? Próbowałem przejrzeć kod źródłowy na Git, żeby zobaczyć, czy mogę od razu coś zauważyć, ale nie mogłem.

+0

2.0 to główne wydanie, główne komunikaty mają zazwyczaj łamanie zmian w API. Więc nie oczekuj, że dostawca, który został napisany przez EF Core 1.1, będzie działał na 2.x. Zdrowy rozsądek;) – Tseng

+1

Zwykle zgadzam się, ale ostatnio zmieniono nazwę wersji 2.0 z wersji 1.2, aby podkreślić, że jest ona zgodna z .NET Standard 2.0. Nie jestem pewien, czy jest coś, co łamie, 2.0 to raczej tytuł marketingowy. –

Odpowiedz

8

Spójrzmy na EF Rdzenia 2.0 Preview 1 announcement:

Jeśli używasz dostawcy bazy danych osób trzecich, a następnie sprawdzić, czy wydali aktualizację, która zależy od 2.0.0-preview1 finału . Jeśli tak, to po prostu uaktualnij do nowej wersji. Jeśli nie, to nie będzie można dokonać aktualizacji, ponieważ wersja 2.0 zawiera kilka przełamujących zmian i 1. nie oczekuje się, że operatorzy będą z nią współpracować.

Oznacza to Pomelo nie przewiduje się wsparcia EF Rdzeń 2.0 aż comparatible release jest produkowany.

1

Ostatnio ten sam błąd wystąpił podczas aktualizacji mojego projektu do .NET Core 2.0. W tym momencie rozwiązanie jest opisane w https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql Zasadniczo pakiet aktualizacji do wersji 2.0.0-prereleased RC- *

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

Ten, który znalazłem był dostępny, to '' i to rozwiązało dla mnie ten problem. –