2014-04-09 15 views
5

Ich habe gerade meine Anwendung von der Datenbank zuerst auf den Code zuerst geändert! Was für eine großartige Verbesserung in der Bereitstellung! Aber jetzt habe ich folgendes Problem. Ich habe mein Code-First-Modell aus meiner Datenbank generiert, aber nachdem ich die Datenbank aus dem generierten Code neu erstellt habe, werden meine Ansichten aus meiner Datenbank wie Tabellen generiert!Erstellen einer SQL-Ansicht aus EF 6.1 Code zuerst

Wie erzeuge ich meine Ansichten zuerst aus Code? und/oder sie meinen Entitäten zuordnen, wenn ich sie manuell generieren muss?

BEARBEITEN.

Luke McGregor Post brachte mich sicher nahe. Ja, es generiert jetzt die Ansichten. Aber die Migrationen funktionieren nicht.

Beim Versuch, eine Update-Database-Anweisung auszuführen, lautet die anfängliche Ausgabe, dass noch Codeänderungen vorgenommen werden.

Ich habe daher den Befehl Add-Migration xxx ausgeführt und den Befehl Update-Database erneut ausgelöst.

EDIT 2:

ein paar Unterschiede zwischen meinem Code ersten Code auflösen und die SQL-Code Ansicht löste dieses Problem!

+0

Mögliche Duplikat http://stackoverflow.com/questions/7461265/how-to erstellen -use-views-in-code-erstes-entity-framework –

+0

@CraigW. Ich denke, das ist eine andere Frage, die sich auf die Erstellung bezieht. BAU –

+0

Die zweite Hälfte der Frage bezieht sich auf die Zuordnung Ihrer Entitäten zu bestehenden Ansichten (dh "und/oder sie auf meine Entitäten abbilden, wenn ich sie manuell generieren muss?"), was er tun muss. Ich kann mich nicht einmal darum kümmern, wie Code-First Ansichten generieren würde, es benötigt immer noch eine Tabelle hinter der Ansicht, aus der die Daten gespeichert werden. –

Antwort

10

Sie müssen eine manuelle Migration mit einigen rohen SQL in sie zB etwas entlang der Linien von der unter

public partial class MyMigration: DbMigration 
{ 
    public override void Up() 
    { 
     Sql("CREATE VIEW......"); 
    } 
} 
+3

Verwenden Sie 'Sql ('EXEC (' CREATE View ....... '', um Probleme mit "first in batch" Problemen zu vermeiden. Sie können "GO" nicht in eine Migration einfügen, weil es kein SQL ist Befehl – Colin

+0

LukeMcgregor, Sie brachte mir sicherlich nahe an einer Lösung. @Colin, danke für die EXEC-Ergänzung. Es funktioniert sicherlich, um die Ansichten für mich zu generieren – spons

+0

Dies funktioniert, habe ich einige andere Antworten auf ähnliche Fragen bemerkt erstellen Sie einen DbContext und ausführen Der Update-View-Befehl anstelle des Aufrufs von Sql(). Dies hat den unglücklichen Nebeneffekt, dass die DB tatsächlich aktualisiert wird, selbst wenn update-database -script aufgerufen wird – user2981639

Verwandte Themen