So fügen Sie Code zum Initialisieren der SQL-Datenbank hinzu

7

Ich benutze Codefirst und ich benutze Elmah. Ich neu erstellt jedes Mal, wenn die Datenbank, müssen Sie den Code manuell aus der Datei hinzufügen:

%Vor%

Ich führe diesen Code automatisch aus? Ich habe versucht, db.Database.ExecuteSqlCommand zu verwenden, aber ich bekomme viele Fehler des Formulars:

%Vor%     
Mediator 16.05.2012, 15:03
quelle

7 Antworten

18

Versuchen Sie diese Migration, bedenken Sie, dass erwartet wird, dass alle GO-Anweisungen in einer einzigen Zeile stehen und dass die Datei Zeilenenden verwendet. Ich habe Elmah mit dem Paket elmah.sqlserver NuGet installiert, das die Datei SqlServer.sql an der entsprechenden Stelle ablegt. Sie müssen den Ressourcennamen ändern, damit er zu Ihrem Projekt passt.

%Vor%

Ich

    
bart 11.06.2012, 01:55
quelle
4

nur um meinen Kommentar zum OP als Antwort zu formalisieren;

Ich denke, dass die beste Vorgehensweise hier wäre, dass nur Ihre Code-First-db von irgendwelchen radikalen Änderungen betroffen sein sollte (d. h. die Wiederherstellung der db beim Modellwechsel). Alle anderen Tabellen, die nichts damit zu tun haben, sollten sich in einer ApplicationServices-Datenbank oder ähnlichem und NICHT in der Core-Datenbank befinden. Auf diese Weise erstellen Sie keinen Support-Albtraum, wenn Sie Ihr Modell mit einer einfachen Änderung der Eigenschaften oder des Datentyps aktualisieren müssen. Außerdem verlieren Sie natürlich jedes Mal den gesamten Verlauf Ihrer Logging-Tabellen (und anderer), wenn Sie eine Änderung vornehmen.

Also, mit einem Wort, ich denke, dass Sie das falsche Problem mit einer möglicherweise ungeeigneten Lösung angehen.

So machen wir das in unserem Geschäft und in früheren Projekten, an denen ich gearbeitet habe.

    
jim tollan 16.05.2012 20:31
quelle
0

Dies ist eine Reihe von SQL-Befehlen, die durch GO-Anweisungen getrennt sind (bei denen es sich nicht um T-SQL-Befehle handelt)

Sie können SQL Managment Studio zum Ausführen des Skripts oder des Befehlszeilentools SQLCMD.exe

verwenden     
Charleh 16.05.2012 15:09
quelle
0

Ich denke nicht, dass Sie so viele Batches auf ExecuteSqlCommand ausführen sollten.

Warum führen Sie es nicht einfach auf SSMS aus?

    
Diego 16.05.2012 15:17
quelle
0

Sie müssen Ihr Skript analysieren, es in separate SQL-Befehle aufteilen und jeden einzeln über SqlCommand ausführen. Leider ist mir keine Möglichkeit bekannt, dies zu automatisieren.

    
Branko Dimitrijevic 16.05.2012 19:38
quelle
0

Für das Skript müssen Sie die Stapel trennen ( GO ist das Stapeltrennzeichen) und jeden Stapel einzeln an SQL Server senden. Ich habe tatsächlich ein Beispielprojekt dbutilsqlcmd , das genau das tut, und unterstützt auch mehr sqlcmd-Erweiterungen wie :setvar und $(variable) Ersetzung im Skript, was bei der Bereitstellung sehr nützlich sein kann.

    
Remus Rusanu 16.05.2012 20:02
quelle
0

Es gibt jetzt ein nugget-Paket, das die Elmah-Tabelle und die Procs für Sie initialisiert: Ссылка . Fügen Sie es Ihrem Webprojekt hinzu. Es wird dann zuerst EF-Code verwenden, um es für Sie zu erstellen. Es fügt Ihrem App_Start-Ordner einen Initialisierer hinzu, sodass Sie eigentlich keinen Code hinzufügen müssen. Es wird eine Migration zu Ihrer Datenbank hinzugefügt, um sicherzustellen, dass sie nur einmal hinzugefügt wird.

    
valdetero 03.03.2015 19:37
quelle