Erstellen von sql server compact-Datei im appdata-Ordner
Ich entwickle ein einfaches Stück software, die verwendet Entity Framework code first und sql server compact 4. Im moment ist diese setup funktioniert. Entity framework erstellt der sql server compact-Datei, wenn Sie noch nicht existiert. Der Pfad zu der Datenbank definiert wird aus einer connectionstring gespeichert, die innerhalb der app.config-Datei. Es ist der Aufbau so:
<connectionStrings>
<add name="DataContext"
connectionString="Data source=Database.sdf;"
providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
Allerdings möchte ich die Datenbank in einen Ordner innerhalb des aktuellen Benutzers Anwendungsdaten-Ordner (der C:\Users\User\AppData\Roaming Ordner auf meinem win7 Rechner). Ich habe versucht Einstellung der Datenquelle, der Sie den connectionstring, um so etwas wie %APPDATA%\Database.sdf, aber das funktioniert nicht, ich erhalte eine "Illegale Zeichen im Pfad" Ausnahme.
Möchte ich stick mit der connectionstring-Methode, weil ich möchte, um eine andere Datenbank für meine unit-tests als mit meinem eigentlichen Anwendung. Auf diese Weise ist es leicht ändern Sie die Datenbank, indem Sie eine app.config-Datei im Stammverzeichnis des Projekts.
Kann jemand lenken mich in die richtige Richtung?
InformationsquelleAutor Jesse van Assen | 2011-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unter:
Du bist herzlich willkommen.
Benötigen Sie ein anderes Rohr vor "DataDirectory" (der|DataDirectory| -). Dachte nur das vielleicht jemand helfen, denn ich war fest auf ihn für eine Weile! msdn.microsoft.com/en-us/library/cc716756(v=vs. 100).aspx
Die fehlenden pipe (|) Hinzugefügt wurde, die in einem edit.
InformationsquelleAutor Teoman Soygul
Dieser erzählt Sie Ihre app für die Datenbank.sdf in Ihrer app aktuelle Arbeitsverzeichnis; die könnte überall sein und darf nicht schreibbar sein. Sie müssen sich an einem Speicherort, den Sie angeben:
ADO.NET sieht für pipe-Zeichen in Verbindung Saiten auf und erweitert Sie um den Wert der Immobilie von Namen in der Anwendung domain. Also, was ist der Wert der
DataDirectory
Eigenschaft? Es soll festgelegt werden, was der Bereitstellung Ihrer Anwendung:|DataDirectory|
und nie hart codierte Pfad.Visual Studio-Dateien in Ihr Projekt mit ein "copy to output directory" - Eigenschaft kopiert wird DataDirectory. In den meisten Fällen DataDirectory wird eine nur-lese-Ordner. Das ist in Ordnung, wenn Ihre Daten nur Lesen, aber wenn Sie wollen, zu schreiben, Sie müssen kopieren von Daten auf ein beschreibbares Verzeichnis. Wahrscheinlich der beste Ort ist
Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData))
. Es gibt mehrere Möglichkeiten, dies zu tun:CREATE DATABASE
odernew SqlCeConnection()
oder was auch immer.SpecialFolder.ApplicationData
Ordner und, falls nicht, kopieren Sie es.Wenn Sie die Suche im Internet nach Beispiel-code auf die Erstellung der lokalen Datenbank werden Sie über eine Menge schlechte Ratschläge. Tun Sie nicht die folgenden:
Ich hoffe, ich habe nicht zu erklären, warum hart codierte Pfad zu Ihren Daten ist falsch, aber bewusst sein, dass, wenn Sie einen vollständigen Pfad angeben in Ihrem Verbindungs-string, der Pfad ist relativ zum aktuellen Arbeitsverzeichnis.
Versuchen Sie nicht, ändern Sie die Daten in
DataDirectory
. Nicht nur ist dieses Verzeichnis nicht immer änderbar durch Benutzer, es ist im Besitz der installer nicht mehr durch den Benutzer. Reparatur oder deinstallation der Applikation löscht alle Daten des Benutzers; der Benutzer weiß es nicht. Stattdessen kopieren Sie die installierten Daten in einen Ordner beschreibbar machen und alle änderungen an der Kopie.Ändern Sie nicht den Wert von
DataDirectory
im code, es wird durch den installer, und wenn Sie es ändern, werden Sie nicht wissen, wo die Daten installiert wurde. Wenn Sie das erstellen einer leeren Datenbank, öffnen Sie einfach es in Ihre endgültige Lage. Wenn Sie eine Kopie zu machen, öffnen Sie die Datenbank installiert haben, speichern Sie es, um die Position des Benutzers, in der Nähe der installierten Datenbank, und öffnen Sie die Kopie.Ich auch abraten speichern von Daten auf
Environment.SpecialFolder.CommonApplicationData
. Dies ist möglicherweise nicht beschreibbar durch den Benutzer, und es sei denn, es ist ein sehr sehr guter Grund alle Benutzer erlaubt sein muss, zu ändern, die Daten anderer Benutzer, jeder Benutzer sollte über eine eigene Datenbank.InformationsquelleAutor Dour High Arch