Mit Entity Framework Core-Migrationen für die Klasse Bibliothek-Projekt
Diese scheinen ein Problem, das bereits behoben, zumindest für die SQLite-Datenbanken.
Meine Lösung besteht aus 3 Projekten:
- WPF-Projekt (Standard-startup-Projekt) (.NET Framework 4.7),
- "Core" - Projekt halten die view-Modell-und nicht-UI-Zeugs - Klasse-Bibliothek-Projekt (.NET-Standard 2.0)
- "Relational" - Projekt halten alle der Entity-Framework-Daten Schicht - ich mag diese getrennt (.NET-Standard 2.0)
Ich habe die folgenden Pakete installiert sind in die wichtigsten WPF-Projekt:
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
Projekte 2 und 3 verwiesen wird, in meinem Haupt-WPF-Projekt. Also im Grunde sollte es genug sein, für die EF zu lösen, die DbContextes.
Es ist jedoch nicht - wie ausgeführt Add-Migration
auf mein WPF-Projekt Ergebnisse:
PM> Add-Migration "Initial"
No DbContext was found in assembly 'TestWPFProject'. Ensure that you're using the correct assembly and that the type is neither abstract nor generic.
Wechsel zu Projekt 3
als Standard in der Paket-Manager-Konsole führt zu:
PM> Add-Migration "Initial"
Unable to create an object of type 'ClientDbContext'. Add an implementation of 'IDesignTimeDbContextFactory<ClientDataStoreDbContext>' to the project, or see https://go.microsoft.com/fwlink/?linkid=851728 for additional patterns supported at design time.
Wie kann ich richtig mit EF-Core-Migrationen mit meiner Klasse-Bibliothek-Projekt-und WPF-Projekt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich reproduziert Ihre Lösung und fand... eine Lösung 🙂
Let ' s get zu vertiefen.
1. Kern-Projekt
Namen: ClassLibrary1.
Typ: .NET-Standard 2.0-Klassenbibliothek.
Abhängigkeiten: keine.
In meinem test-Lösung, es enthält nur eine Klasse, die ein Modell namens Person.
Person.cs
2. Relationale Projekt
Namen: EFClassLibrary.
Typ: .NET-Standard 2.0-Klassenbibliothek.
Abhängigkeiten:
Diesem Projekt, in meiner test-Lösung, enthält nur eine Klasse: die Datenbank-Kontext.
ClientDbContext.cs
Verbindungszeichenfolge
In diesem Klasse a definiert eine verwendet die Verbindungszeichenfolge, um die Verbindung zu der Datenbank (vorausgesetzt, es ist LocalDb SQL Server). Wenn Sie möchten, legen Sie die Verbindungszeichenfolge in einer Konfigurationsdatei, könnte man hinzufügen, eine gemeinsame config Datei in Ihrer Projektmappe und dann auf diese Datei verweisen, die in Ihrem
App.config
- Datei (für mehr informartion werfen Sie einen Blick auf auf dieser Seite)Konfigurieren der Ziel-framework
Um in der Lage sein, Migrationen auf dieses Projekt ohne die Einstellung als startup-Projekt andere Projekte, müssen Sie die Ziel-framework. Klicken Sie rechts auf das Projekt und klicken Sie auf die Bearbeiten EFClassLibrary.csproj Eintrag. Unterhalb der
<TargetFramework>netstandard2.0</TargetFramework>
line, sollten Sie eine weitere Zeile hinzufügen, die angeben, welche Rahmenbedingungen Sie ansprechen möchten. Um das Ziel .NET Framework 4.7 sollten SieEine Liste aller zulässigen Werte finden Sie hier.
Meine EFClassLibrary.csproj schauen, wie Sie den code unten nach dem hinzufügen der .NET Framework 4.7 als Ziel.
Hinzufügen Migrationen
Nun sind Sie bereit zum hinzufügen Ihrer ersten migration. Öffnen Sie den Paket-Manager-Konsole, und legen Sie als Standard-Projekt der EFClassLibrary. Stellen Sie auch das Projekt als startup-Projekt (Rechte Maustaste auf das Projekt, und klicken Sie auf die als Startprojekt Festlegen Eintrag).
Typ
dann
3. WPF App project
Namen: WpfApp1.
Typ: WPF-Anwendung Verwendung .NET Framework 4.7.
Abhängigkeiten:
In diesem Projekt, das ich keine Dateien Hinzugefügt. Eine gerade bearbeitete die
MainWindow.xaml.cs
- Datei, um zu überprüfen, dass alles ordnungsgemäß funktioniert.MainWindow.xaml.cs
Hoffe es hilft 🙂
<TargetFramework>net47</TargetFramework>
Linie mit WPF-Projekt als Startprojekt. Keine Ahnung, warum es funktioniert, aber es funktioniert. In der Tat, die Lösung, die wirklich geholfen hat war hier dieser:public ClientDbContext() : base() { }
... da hatte ich nur die Optionen Konstruktor in meinem dbcontext. Nach dem hinzufügen der default ist, funktioniert es wie ein Charme. Vielen Dank für deine Mühe. Ich werde vergeben Sie ein Kopfgeld nach 14 Stunden wegen der DAMIT Einschränkungen.ClientDbContext
nicht über connectionString. Wenn connectionString in der config von WPF-App (oder MVC-App)? Ich denke, die migration wird nicht funktionieren, wenn ich EFClassLibrary als StartUp-Projekt.Was für mich gearbeitet wird, nur tun, Ihrem regelmäßigen Sachen auf der UI-Seite Starten.cs
Dann auf Ihre DBContext-Konfiguration, fügen Sie einfach einen Konstruktor
Nach, dass auf Ihrem Paket-Manager-Konsole führen Sie einfach die folgenden
Dann Everytihng gingen Hinzugefügt und das gleiche tun für die Aktualisierung der Datenbank
In Ihrer startup-Projekt, das Sie erstellen eine Fabrik, die Umsetzung IDesignTimeDbContextFactory und erstellen die DBContext für Sie.
Was microsoft schlägt hier erstellen Sie ein neues class library für die Migrationen sind, dann bewegen Sie Ihr Modell-snapshots von Dateien und Migrationen auf die neue Klasse Bibliothek.
Wenn Sie noch nicht Hinzugefügt jede, hinzufügen, um das DbContext-Projekt, dann verschieben Sie es.
Dann konfigurieren migration Montage:
Und dann Verweis hinzufügen, um Ihre Migrationen Montage aus dem Autostart-Montage:
Hinweis:
Wenn dies bewirkt, dass eine zirkuläre Abhängigkeit, aktualisieren Sie die Ausgabe-Pfad der Klassenbibliothek:
für eine zweite Referenz verwenden Ben Cull ' s Anleitung, Entity Framework Core migration for class library-Projekte.
War ich mit der Klasse-Bibliothek-Projekt als Daten-layer und asp.net core-Projekt als start-up-Projekt.Zuerst registrierte ich meine E. F-core-Kontext, in asp.net start-up-Klasse.
Dann in meinem Rahmen-Klasse(befindet sich in der Klasse-Bibliothek-Projekt), die ich zur Verfügung gestellt Verbindung Zeichenfolge aus der Datei und verwendet Sie in OnConfiguring Methode.
dann für die Anwendung von migration und Aktualisierung der Datenbank verwendete ich folgende Befehle jeweils