Créer sql server compact fichier dans le dossier appdata
Je suis en train d'élaborer un simple morceau de logiciel qui utilise Entity Framework code first et sql server compact 4. Au moment où cette configuration fonctionne. Entity framework crée le serveur sql server compact fichier si il n'existe pas encore de. Le chemin d'accès à la base de données est défini à partir de l'intérieur d'un connectionstring qui est stocké à l'intérieur de l'app.fichier de configuration. Elle est construite comme ceci:
<connectionStrings>
<add name="DataContext"
connectionString="Data source=Database.sdf;"
providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
Cependant, je veux placer la base de données dans un dossier dans le courant de l'utilisateur du dossier de Données d'Application (le C:\Users\User\AppData\Roaming dossier sur mon win7 machine). J'ai essayé le réglage de la source de Données de la propriété connectionstring pour quelque chose comme le %APPDATA%de la Base de données.sdf, mais cela ne fonctionne pas, j'obtiens un "caractères Illégaux dans le chemin de" l'exception".
Je veux coller avec la connectionstring méthode, parce que je voudrais utiliser une autre base de données pour mes tests d'unité qu'avec mon application réelle. De cette façon, il est facile de modifier la base de données en plaçant une application.fichier de config à la racine du projet.
Quelqu'un peut-il m'orienter dans la bonne direction?
OriginalL'auteur Jesse van Assen | 2011-10-03
Vous devez vous connecter pour publier un commentaire.
Ci-dessous:
Vous êtes les bienvenus.
Vous avez besoin d'ajouter un autre tube avant "DataDirectory" (|DataDirectory|). Juste pensé que cela pourrait aider quelqu'un car je suis bloqué sur la pour un tandis que! msdn.microsoft.com/en-us/library/cc716756(v=vs. 100).aspx
Le manque de pipe (|) a été ajouté dans l'édition.
OriginalL'auteur Teoman Soygul
Cela indique à votre application pour rechercher la Base de données.sdf dans votre app du répertoire de travail actuel; ce qui pourrait être n'importe où et peut ne pas être accessible en écriture. Vous avez besoin de regarder un emplacement que vous spécifiez:
ADO.NET recherche pipe caractères dans les chaînes de connexion et s'étend à la valeur de la propriété de ce nom dans le domaine de l'application. Alors, quelle est la valeur de la
DataDirectory
propriété? C'est censé être réglé par quoi que ce soit déployé votre application:|DataDirectory|
et jamais codé en dur chemin.Toute Visual Studio fichiers de votre projet avec un “copier vers un répertoire de sortie” de la propriété sera copié à DataDirectory. Dans la plupart des cas DataDirectory sera un dossier en lecture seule. C'est très bien si vos données sont en lecture seule, mais si vous voulez écrire, vous devez copier vos données à un emplacement accessible en écriture. Probablement le meilleur endroit est
Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData))
. Il y a plusieurs façons de le faire:CREATE DATABASE
ounew SqlCeConnection()
ou quoi que ce soit.SpecialFolder.ApplicationData
dossier et, si non, le copier.Si vous rechercher sur le web pour un exemple de code sur la création d'une base de données locale vous allez courir à travers beaucoup de mauvais conseils. Ne pas effectuer les opérations suivantes:
J'espère que je n'ai pas à expliquer pourquoi coder en dur le chemin d'accès à vos données est mal; mais il faut être conscient que, sauf si vous spécifiez un chemin d'accès complet dans votre chaîne de connexion, le chemin est relatif au répertoire de travail courant.
N'essayez pas de modifier les données dans
DataDirectory
. Non seulement est-ce répertoire est pas toujours modifiables par les utilisateurs, il est possédé par le programme d'installation non par l'utilisateur. La réparation ou de la désinstallation de l'application va supprimer toutes les données de l'utilisateur; les utilisateurs n'aiment pas ça. Au lieu de cela, copiez les données installés dans un dossier accessible en écriture par l'utilisateur et de faire toutes les modifications apportées à la copie.Ne modifiez pas la valeur de
DataDirectory
dans votre code, il est défini par l'installateur et si vous changer, vous ne saurez pas où vos données a été installé. Si vous êtes à la création d'une base de données vide, il suffit de l'ouvrir dans votre emplacement final. Si vous allez faire une copie, ouvrez la base de données installée, l'enregistrer à l'emplacement de l'utilisateur, à proximité de la base de données installée, et ouvrez la copie.J'ai aussi décourager l'enregistrement des données à
Environment.SpecialFolder.CommonApplicationData
. Cela peut ne pas être accessible en écriture par l'utilisateur, et à moins qu'il y est une très très bonne raison de tous les utilisateurs doivent être autorisés à modifier les données d'autres utilisateurs, chaque utilisateur doit disposer de leur propre base de données.OriginalL'auteur Dour High Arch