2016-12-11 3 views
0

Ich baue eine ASP.NET Core 1.1.0-Anwendung, die mit Entity Framework Core, die ich in Visual Studio 2015 baue, auf eine vorhandene MySQL-Datenbank zugreifen muss mit den neuesten Updates. Ich begann mit dem "offiziellen" MySQL-Provider (MySql.Data.EntityFrameworkCore), habe aber das gleiche Problem mit dem Pomelo-Paket (Pomelo.EntityFrameworkCore.MySql).NotImplemented Ausnahmen mit MySQL Provider in ASP.NET Core Mit EF Core

Das Context-Objekt, das in meinen Home-Controller injiziert wird, hat alle Arten von NotImplemented-Ausnahmen, wie Sie im Bild sehen können. Members ist eine meiner DBSet-Sammlungen, die das Member POCO verwenden. (Übrigens, ich plane nicht, Migrationen zu verwenden, das ist also kein Faktor.) Dies ist der Status des Kontextobjekts, sobald es in den Controller injiziert wird, bevor ich überhaupt versuche, auf Daten zuzugreifen.

Locals Window when in controller constructor

Das vollständige Detail einer typischen Nachricht ist:

((Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure) this.db.Members) .Instance ' eine Ausnahme vom Typ warf' System.NotImplementedException

ich glaube nicht, dass es etwas sehr interessant in meiner project.json Datei, aber die entsprechenden Linien sind:

"Pomelo.EntityFrameworkCore.MySql": "1.1.0", 
"Pomelo.EntityFrameworkCore.MySql.Design": "1.1.0" 

In Startup.cs im ConfigureServices Methode, habe ich diese Aussagen:

string connectionString = Configuration.GetConnectionString("ManageRCNConnection"); 
services.AddDbContext<MembersContext>(options => options.UseMySql(connectionString)); 

Dinge sind an diesem Punkt ziemlich einfach.

Bisher hat mich mein Google-Foo enttäuscht, um herauszufinden, was los ist.

Kann mir jemand einen Hinweis geben, was das Problem ist?

Danke!

Update: Wenn ich die Fehler in der Constructure ignoriere, wie @Tseng suggeriert, bekomme ich Fehler beim ersten Mal, wenn ich versuche, eine Entität aus der Datenbank zu bekommen.

Hier ist der Code für meine MembersContext. Ich habe einige Eigenschaften entfernt, aber es sind nur mehr DbSet-Sammlungen.

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

    public DbSet<Member> Members { get; set; } 
    public DbSet<FamilyMember> FamilyMembers { get; set; } 
    public DbSet<Membership> Memberships { get; set; } 
    ... 
} 

Ich bin kein Zusammenhang Fabrik verwendet wird, könnte das das Problem sein?

+0

Was genau ist Ihre Frage/Problem? Sie sollten die Ausnahmen der Debug-Ansicht nicht zu ernst nehmen, es sei denn, Sie müssen auf diese Eigenschaften/Methoden zugreifen. Visual Studio Debugger wertet alle Eigenschaften aus, wenn sie in der Debug-Ansicht aufgefaltet werden. Wenn einige von ihnen nicht implementiert sind, ist kein schlechtes Zeichen erforderlich. – Tseng

+0

Allerdings sollte angemerkt werden, dass Oracles MySQL-Provider mehr Alpha-Status hat als alles andere und dass Pomelo kürzlich zu einem "mehr legalen" Angebot wurde, also nicht mehr auf alten EF6-Provider-Quellen basiert: https://github.com/PomeloFoundation /Pomelo.EntityFrameworkCore.MySql/issues/40#issuecomment-241950787 – Tseng

+0

Danke @Tseng! Das Problem ist, dass, wenn ich nach dem Konstruktor fortfahre, das erste Mal, wenn ich versuche, auf irgendwelche Daten zuzugreifen, andere Ausnahmen erhalte. Diese sind etwas konkreter, insbesondere, dass eine Tabelle in der Datenbank nicht existiert. So etwas ist eindeutig falsch, und es ist wahrscheinlich in meiner MembersContext-Definition. Ich werde meine Frage aktualisieren, um diesen Code anzuzeigen. – RiverRunner

Antwort

1

Nun, dies war ein frustrierender Prozess, aber ich habe endlich alles aussortiert. Vielen Dank an @Tseng für die Fragen und Kommentare, die mir geholfen haben, mich in die richtige Richtung zu bewegen.

Zuerst wechselte ich zum Pomelo MySQL Provider. Der offizielle MySQL-Provider ist vorveröffentlicht, aber ich dachte, es sei weit genug, um zumindest mit diesem neuen Projekt anzufangen. Es ist nicht, wie von heute. (Sapient Guardian scheint auch einen soliden Provider zu haben, aber ich musste es nicht ausprobieren.)

Zweitens erkannte ich, dass etwas an meiner Objektkontextklasse einfach nicht richtig war und dass es die Quelle von war meine Probleme. Also ging ich wieder ans Gerüst um zu arbeiten. Ich habe einige Dinge ausprobiert, aber so sind die relevanten Teile der Abhängigkeiten in meinem Projekt.JSON-Datei am Ende:

"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final", 
"Microsoft.EntityFrameworkCore.Design": "1.1.0", 
"Pomelo.EntityFrameworkCore.MySql": "1.1.1-prerelease-10000", 
"Pomelo.Data.MySql": "1.0.0", 
"Pomelo.EntityFrameworkCore.MySql.Design": "1.1.1-prerelease-10000" }, 

, dass alle Pakete für den Gerüstbau und Migrationen erforderlich zu sein scheint, obwohl ich nicht Migrationen verwenden. Ich musste dem Werkzeugbereich der Datei nichts hinzufügen.

Dann arbeitete dieser Befehl im Paket-Manager-Konsole in Visual Studio 2015:

Scaffold-DbContext "<connection string>" Pomelo.EntityFrameworkCore.MySql -OutputDir Models 

Voila! Ein korrekter Objektkontext sowie Entitätsklassen. (Ich erwarte, dass die Dotnet-ef-Befehle auch funktionieren würden, aber sie nicht versucht haben.)

Danach hatte ich ein Problem mit einigen "Kann nicht Objekt vom Typ" System.String "zu Typ" System.Byte "zu werfen "." Fehler in einem Entitätsobjekt. Das stellte sich heraus, weil der Provider (oder vielleicht der MySQL-Connector) einige Probleme mit Zeichenfeldern und Zeichenfolgen in .NET Core hatte. Ich habe diese Felder in Varchar geändert, und alles war gut.

+0

Ich würde Sie ermutigen, ein Problem auf GitHub unter https://github.com/PomeloFoundation/ zu erstellen. Pomelo.EntityFrameworkCore.MySql/issues/so dass Ausnahmen wie "Kann nicht Objekt des Typs 'System.String' in den Typ 'System.Byte' zu werfen." kann gelöst werden. –