2016-12-30 4 views
1

Ich möchte EF-Migrationen verwenden und muss daher Update-Datenbank verwenden. Da ich einige .mdf-Dateien im Hauptordner des Projekts verwende, die auch beim Debuggen verwendet werden sollen, habe ich ein paar ConnectionStrings in App.config die ich mit EF benutze.Updata-Database -ConnectionStringName mit modifiziertem | DataDirectory |

Eine Probe ConnectionString:

<add name="DataContext" 
     providerName="System.Data.SqlClient" 
     connectionString="Data Source=(LocalDB)\mssqllocaldb;Database=Database;Integrated Security=True;AttachDbFilename=|DataDirectory|\Database.mdf"/> 

Denn während |DataDirectory| Debuggen Project-Root\bin\Debug ist, schrieb ich eine Funktion, die |DataDirectory|-Project-Root\app_data ändert:

 #if DEBUG 
     string path = Directory.GetParent(Environment.CurrentDirectory).Parent?.FullName + "\\app_data"; 
     AppDomain.CurrentDomain.SetData("DataDirectory", path); 
     #endif 

Das Problem ist, dass |DataDirectory| nicht aktualisiert, wenn ich rufe Update-Database und kann daher die .mdf-Datei nicht finden.

Ich fand eine very similar question ohne Antworten/Lösungen, aber es schien nicht so viel Aufmerksamkeit zu bekommen.

Gibt es also einen sauberen Weg, dies oder einen besseren zu tun, um dies zu tun? Ich brauche das Projekt einfach zu portieren, was bedeutet, dass ich in der Lage sein muss, einfach den Ordner zu kopieren und eine andere VS-Instanz ausführen zu lassen.

Antwort

1

Das |DataDirectory| Konzept ist mehr für Web-Projekte und unter Berücksichtigung Debug läuft unter , dann denke ich, Ihre Anwendung ist keine Webanwendung. Die einfachste Antwort wäre, die .mdf Datei auf Copy if newer oder Always copy in Ihrem Projekt zu setzen. Auf diese Weise erhalten Sie immer die .mdf Datei im richtigen Ordner, wenn Sie die Anwendung von VS ausführen.

+0

An diesem Punkt versuche ich noch herum, aber das wird schließlich ein Web-Projekt sein. Ich wusste nicht, dass '| DataDirectory |' nur für diese gedacht war. Aber ich verstehe richtig, dass ein Web-Projekt nicht unter "Project-Root \ bin \ Debug" laufen würde, ja? –

+1

Web-Projekte unterstützen die | DataDirectoy | "out-of-the-box" mit dem Ordner 'App_Data', während andere Projekte etwas manövriert werden müssen (wie bei' AppDomain'). Soweit ich mich erinnere, laufen noch einige Teile einer Web-App von den 'bin \ [debug | release]' fodlern. Sie können hier mehr auf dem 'App_Data' Ordner lesen: https://msdn.microsoft.com/en-us/library/aa478948.aspx Schauen Sie einfach nach„App_Data“auf dieser Seite. –

Verwandte Themen