5

Lors de la construction, je veux créer automatiquement un script SQL pour générer une nouvelle base de données. Je prévois d'utiliser ce script afin que je puisse créer une base de données principale que je peux comparer avec la base de données de production, pour générer un script de migration. Je ne peux pas utiliser ma base de développement, car je l'ai configuré pour utiliser SqlCE pendant le développement.Est-il possible de générer un script db sql avec Ef4 CodeFirst lors de la construction?

Malheureusement, je n'arrive pas à trouver quoi que ce soit dans l'API CodeFirst pour générer un script SQL. Je suis sûr que c'est possible, parce que le modèle le fait d'abord. Je vois les appels d'API sur mon DbContext pour initialiser une base de données, mais rien qui me donne le script pour l'initialiser moi-même. Je souhaite également que ce script soit généré lors de la génération. Quelle est la meilleure façon de le faire? Je pensais créer un template T4, et utiliser Chirpy pour le faire tourner en build, mais je me demande s'il existe une solution plus simple.

Répondre

2

Non, il n'y a pas de possibilité pour le moment. Dans mon opition cela peut être possible en créant un initialiseur personnalisé. L'initialiseur crée la base de données et utilise SQL Server Management Objects pour créer des scripts à partir de la base de données. Mais il ne créera que des scripts basés sur le serveur de base de données actuel, donc dans le cas de SqlCE, vous obtiendrez des scripts pour SqlCE (il existe des différences dans les types SQL utilisés).

L'approche correcte dans votre scénario consiste à installer l'édition SQL Server Express et à utiliser les fonctions standard pour initialiser votre base de données et cette instance. Ensuite, vous pourrez utiliser create script depuis la base de données ou utiliser les outils de base de données Visual Studio 2010 pour créer diff. scripts contre votre production.

+0

C'est ce dont j'avais peur. Je suppose que la meilleure voie à suivre est de créer un test unitaire «Peut créer une base de données Sql Express», et ainsi chaque fois que j'exécuterai des tests unitaires, il recréera la base de données sur le Sql Express de la machine locale. Merci :) – KallDrexx

2

Pour tous ceux qui cherchent encore; Une option est que vous pourriez obtenir le DDL généré sous forme de chaîne et l'enregistrer dans un fichier;

string sqlscript = (context as IObjectContextAdapter).ObjectContext.CreateDatabaseScript(); 
Questions connexes