web-dev-qa-db-fra.com

Comment puis-je utiliser Entity Framework en mode de création de liste déroulante Code First?

J'utilise Entity Framework v4. J'ai suivi les instructions du tutoriel Nerd Dinner . Je suis actuellement en mode développement (non publié dans des environnements supérieurs) et j'aimerais que les tables soient recréées à chaque nouveau déploiement, car les modèles sont toujours très volatils et je ne me soucie pas de conserver les données. Cependant, cela ne se produit pas. Les tables ne sont pas créées/modifiées, ni quoi que ce soit qui arrive à la base de données. Si je passe à un modèle de migration à l'aide des commandes du gestionnaire de packages: enable-migrations, add-migration (initial), cela fonctionne et utilise mes migrations. Cependant, comme je ne veux pas encore avoir de migrations granulaires et ne veux que mon script de création initial, je suis obligé de supprimer le dossier des migrations, de refaire les commandes (enable-migrations, add-migration) et de supprimer la base de données manuellement, à chaque fois Je change quoi que ce soit.

Comment puis-je obtenir le comportement drop/create du code en premier?

34
Ryan Langton

Utilisez DropCreateDatabaseAlways initialiseur pour votre base de données. Il recréera toujours la base de données lors de la première utilisation du contexte dans le domaine d'application:

Database.SetInitializer(new DropCreateDatabaseAlways<YourContextName>());

En fait, si vous souhaitez amorcer votre base de données, créez votre propre initialiseur, qui sera hérité de DropCreateDatabaseAlways:

public class MyInitializer : DropCreateDatabaseAlways<YourContextName>
{
     protected override void Seed(MagnateContext context)
     {
         // seed database here
     }
}

Et définissez-le avant la première utilisation du contexte

Database.SetInitializer(new MyInitializer());
51

Si la base de données existe déjà et que vous souhaitez apporter des modifications à votre modèle, vous utilisez DropCreateDatabaseIfModelChanges<YourContextName>

0
Sam Yim