Wenn Ihr Hauptziel darin besteht, die Tabellen zuerst in der Datenbank zu erstellen und dann Ihr Projekt automatisch zu aktualisieren, sollten Sie Database First verwenden.
Allerdings müssen Sie die Nachteile von Database First berücksichtigen:Nach meiner persönlichen Erfahrung habe ich diesen Ansatz hauptsächlich aus zwei Gründen eingestellt:
- Der Support für Database First wird meines Wissens eingestellt. EF Core enthält das Editor-Tool nicht. Einige Links dazu:ein Beitrag von Julie Lerman , die EF Core-Roadmap , und eine frühe Ankündigung von Microsoft .
- Der Modelleditor hatte mehrere Fehler und Macken, die dazu führten, dass der Code hin und wieder kaputt ging. Diese Fehler werden höchstwahrscheinlich einfach nicht behoben (siehe vorheriger Punkt). Dinge wie das Ändern des Typs eines vorhandenen Felds, das Ändern von Fremdschlüsseln usw.
- Ich hatte viele Probleme wegen Quellcode-Repository-Merges der automatisch generierten Entity-Dateien. Vor allem (aber nicht nur), wenn mehrere Personen mit denselben Entitäten arbeiteten, sodass wir Merge-Konflikte im automatisch generierten Code bekamen. Außerdem wurde der automatisch generierte Code manchmal nicht korrekt ausgecheckt, sodass er nicht mehr mit edmx synchron war. Ich bin mir nicht sicher, ob dies auch anderen Leuten passiert, aber es scheint, dass Visual Studio, der Editor, das Tool zur automatischen Codegenerierung im Hintergrund und der TFS-Quellcodemanager manchmal einfach nicht gut zusammenarbeiten.
Wenn Sie also wirklich nicht leben können, ohne zuerst die Tabellen in der Datenbank zu erstellen, fahren Sie mit Database First fort, aber Sie müssen bedenken, was Sie verlieren, wenn Sie Code First nicht verwenden. Dieser Ansatz wird aus gutem Grund allgemein empfohlen.
Normalerweise ist der Hauptgrund für die Verwendung von Database First heutzutage die Unmöglichkeit, Legacy-Code auf den Code First-Ansatz zu migrieren. Soweit ich weiß, ist es allgemein anerkannt, dass Code First der richtige Weg ist, ansonsten zu gehen. Hier haben Sie einen interessanten Beitrag dazu (Auch wenn es ein bisschen alt ist, geschrieben für EF 4.1, als Code First eingeführt wurde, behandelt es die wichtigsten Vor- und Nachteile jedes Ansatzes).
Eine Problemumgehung für Sie könnte darin bestehen, weiterhin Code First zu verwenden, aber auch die verfügbaren Tools zu verwenden, die Ihre Code First-Entitäten automatisch generieren, indem Sie Reverse Engineering aus den Datenbanktabellen durchführen. Damit können Sie Ihre Tabellen immer noch direkt in der Datenbank generieren, aber weiterhin Code First mit Migrationen und allem verwenden. Hier haben Sie einen Post von Julie Lerman über einige dieser Tools . Möglicherweise gibt es neuere Tools, aber ich habe sie nicht verwendet und kenne sie nicht.
Hinweis:Meine persönliche Erfahrung mit Database First war ziemlich schlecht und hielt nicht allzu lange an. Vielleicht könnte jemand mit positiveren Erfahrungen mit diesem Ansatz nützlichere Einblicke darüber geben. Ich verwende Code First seit einiger Zeit und bevorzuge diesen Ansatz wirklich. Meine Antwort ist vielleicht etwas voreingenommen.