Meilleures pratiques d'intégration continue avec le projet SQL Server ou le fichier mdf local dans le projet

Aujourd'hui je maintiens projet qui a vraiment désordre DB qui ont besoin de beaucoup de remaniement et de publier sur les machines des clients.

je sais que je pourrais ajouter un SQL Server Database projet qui ne contient que des scripts de la base de données et crée un .dacpac fichier qui me permet de changer les bases de données des clients automatiquement.

je sais Aussi que je pourrais juste ajouter un .mdf fichier App_Data ou encore Solution_Data dossier et de ma base de données. Je suppose que localDb qui existe déjà me permet de démarrer ma solution sans Serveur SQL

Et atlast je sais que Entity Framework exister avec ses propres migrations. Mais je ne veux pas l'utiliser, sauf que je ne peux pas ajouter et changer les index avec ses migrations et je n'ai pas la moindre flexibilité quand j'ai besoin de décrire des scénarios de migrations difficiles.

Mes objectifs:

  1. générer des scripts de migration vers les DB des clients automatiquement.
  2. rendre ma solution autonome, que tout nouveau programmeur venu au projet n'a même pas besoin d'installer SQL Server sur sa machine.
  3. être capable de mettre à jour la base locale (développement) en 1-2 clics.
  4. Être capable de se déplacer en arrière dans l'histoire de db changements (j'ai du serveur TFS)
  5. être en mesure d'Avoir Propre (Seulement avec des dictionnaires ou des tables de recherche) db en solution avec le schéma de DB à jour.
  6. en plus je veux pouvoir pour mettre à jour mon modèle DB ( EF ou .dbml) de manière automatique ou très facile.

Donc ce que j'ai à poser:

  • quelles sont les forces et les faiblesses de l'utilisation de ces deux approches si je veux atteindre mes objectifs?

  • Peut être que je devrais utiliser la combinaison de ces outils?

  • ou ne suis-je pas au courant d'autres outils existants de MS?

  • Est-il possible d' mise à jour de mon DAL modèle de ce DB?

25
demandé sur teo van kot 2015-05-13 10:26:33
la source

2 ответов

quelles sont les forces et les faiblesses de l'utilisation de ces deux approches si je veux atteindre mes objectifs?

L'utilisation d'un projet de base de données vous permet de contrôler la version de tous les objets de base de données. Vous pouvez publier à diverses instances de base de données et déployer les changements progressivement, plutôt que d'avoir à laisser tomber et recréer la base de données, ce qui préserve les données. Ces modifications peuvent prendre la forme d'un DACPAC, D'un script SQL ou être effectuées directement via L'interface VS. Vous gagnez un lot de contrôle des déploiements à l'aide de scripts pré - et post-déploiement et de profils de publication. Les développeurs devront installer SQL Server (la version developer/express est généralement assez bonne).

LocalDB est un peu plus facile à travailler avec -- vous pouvez faire vos modifications directement dans la base de données sans avoir à publier. LocalDB n'a pas de processus de publication intégré pour pousser les modifications à d'autres instances. Aucune installation de serveur SQL n'est nécessaire.

utiliser un projet de base de données si vous avez besoin du contrôle de version pour vos objets de base de données, si vous avez plusieurs utilisateurs simultanément faire des changements, ou si vous avez plusieurs applications qui utilisent la même base de données. Utilisez LocalDB si aucune de ces conditions ne s'applique ou pour les petites applications qui nécessitent leur propre base de données autonome.

Peut être que je devrais utiliser la combinaison de ces outils?

Oui. Selon le commentaire de Kevin ci-dessous, "si le projet de base de données est défini comme votre projet de démarrage, frapper F5 le déploiera automatiquement à LocalDB. Vous n'avez même pas besoin d'un profil de publication dans ce cas."

ou ne suis-je pas au courant d'autres outils existants de MS?

code Entity Framework First approche se rapproche.

y a-t-il un moyen de mettre à jour mon modèle DAL à partir de cette base de données?

Entity Framework POCO générateur fonctionne bien à moins que vous n'apportiez des changements à vos classes de DAL, puis ces changements se perdent la prochaine fois que vous lancez le générateur.

Il y a un nouvel outil appelé SqlSharpener qui peut générer des classes à partir des fichiers SQL dans un projet de base de données. Je ne l'ai pas utilisé, donc je ne peux pas le confirmer, mais il semble prometteur.

10
répondu Keith 2015-05-19 19:34:48
la source

une façon de générer le script client pour les modifications de la base de données est d'utiliser un outil de modélisation de base de données comme ERWin qui ont une édition communautaire libre. La meilleure façon de répondre à vos exigences de contrôle de version de base de données et de génération de script facile est Redgate SQL Source Control. L'utilisation de L'outil Redgate vous permettra d'atteindre les cinq premiers objectifs mentionnés. De plus, vous pouvez maintenant mettre à jour le modèle EF en un seul clic après avoir changé le schéma de la base de données (C'est-à-dire la première approche de la base de données) tel que requis dans le but 6.

Je ne recommande pas D'utiliser LocalDB du tout. Il pose toujours des problèmes avec le contrôle source comme "fichier DB est utilisé et ne peut pas commettre..."De plus, le développeur du projet n'aura pas d'ensemble commun de données mises à jour sur lesquelles travailler à moins qu'un développeur ajoute des données de test à la base de données et demande à d'autres d'obtenir la dernière version et d'écraser leur propre base de données ou de générer un script de mise à jour par l'outil mentionné précédemment et de demander à chaque développeur de l'exécuter sur son localDB. La meilleure façon dans votre situation est d'utiliser SQL Server sur le réseau. Une version master que tous les développeurs utilisent. Puisque vous avez le contrôle de version sur la base de données en utilisant l'outil mentionné précédemment, vous pouvez faire reculer n'importe quel changement buggy dans le serveur de base de données.

si vous pensez que L'outil RedGate est coûteux pour le budget de votre projet. Une deuxième approche consiste à générer un seul fichier SQL à partir de votre base de données qui contient tous les objets de la base de données et les autres développeurs mettent à jour le fichier SQL dans le contrôle source en fonction de leurs modifications. Cela peut cela se fait facilement en utilisant l'outil de comparaison schema dans visual studio et en ajoutant le script généré au fichier SQL dans le contrôle source. Avec EF DB First approach, vous n'aurez pas à ajouter beaucoup de classes de migration comme dans EF Code first.

1
répondu Muhammad Nagy 2015-05-21 08:35:27
la source

Autres questions sur