Comment déployer mon application si elle nécessite une database avec des tables créées?

J'utilisais précédemment une database dans SQL Server CE . C'est .sdf simple, car je peux avoir une database dans un simple file .sdf et la déployer avec mon application (soit vide soit avec des données déjà ajoutées).

Mais que faire si je veux changer la database en SQL Server Express ?

Bien sûr, si mon client a déjà la database dont j'ai besoin, je n'ai rien à modifier (enfin, peut-être la string de connection ).

Que dois-je faire si je souhaite fournir une application à un client nécessitant la création d'une database SQL Server Express locale? Y at-il un moyen de le faire avec des files .mdf?

Bien sûr, j'ai le code SQL pour créer toutes les tables, avec les foreign keys correspondantes, etc., au cas où cela serait nécessaire.

Je suppose que c'est quelque chose que beaucoup de développeurs ont à faire, mais je ne sais pas vraiment comment le faire.

S'il vous plaît, ne suggère pas d'utiliser SQLite, MySQL, ou une autre database. Je pose cette question parce que je veux savoir comment le faire particulièrement sur SQL Server.

Vous pouvez vous connecter à un SQL Express avec un file DB joint:

 data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true 

Vous pouvez également sauvegarder votre database et la restaurer lors du deployment.

MISE À JOUR Mais si vous ne voulez pas copyr des données, seulement structurer, je vous suggère de continuer avec les scripts SQL. Vous pouvez vérifier si la database existe et la créer si ce n'est pas le cas. Vous pouvez même init certaines tables avec des insertions en vrac.

 if db_id('dbname') is null BEGIN CREATE DATABASE ... etc 

Selon le type de votre application, vous pouvez soit spécifier vos scripts pour le deployment (AFAIK, VS2010 propose cela pour les applications Web) ou appeler sql.exe avec votre script en tant qu'étape de deployment.

Il y a plusieurs choses à penser:

  1. Vous devrez peut-être redissortingbuer SQL Express lui-même
  2. Déployer la database dans une nouvelle configuration
  3. Migrer une database existante vers le nouveau schéma / la nouvelle version

    Ajouter 1. Un document long mais très descriptif sur cette procédure Les documents officiels

    Ajouter 2. Sur le site MSDN

    Ajouter 3. Les deux seules methods que j'ai utilisées pour résoudre ce problème sont 1: déployer la nouvelle version et migrer datatables à l'aide d'un script et 2: créer un script qui transforme la version actuelle en nouvelle version.

Dans mon expérience, la migration d'une database existante peut s'avérer être la chose la plus difficile en fonction des changements apportés au schéma de la database.