web-dev-qa-db-fra.com

Comment créer une base de données en utilisant les premières migrations de code?

J'ai un projet ASP.NET MVC 3 qui utilise Entity Framwork 4.3 et ses migrations. Maintenant, je veux qu'Entity Framework crée une base de données pour moi en utilisant les migrations que j'ai déjà. Lorsque j'essaie d'exécuter le script Update-Database, il me donne ce qui suit:

Update-Database -Verbose -ProjectName AssemblyWithMigrations -StartUpProjectName WebProjectAssembly No migrations configuration type was found in the Assembly '/* my name of Assembly */'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

Mais quand j'essaye d'exécuter Enable-Migrations Je vois ce qui suit:

Migrations have already been enabled in project 'AssemblyWithMigrations '. To overwrite the existing migrations configuration, use the -Force parameter.

Donc, le problème est que EF essaie de résoudre la version de migration actuelle pour mettre à jour la base de données, je suppose. Mais la base de données n'existe pas et elle échoue évidemment.

La question est: comment utiliser les migrations EF pour créer une base de données si elle n'existe pas? Ou, quelle est la bonne façon de le faire en utilisant la console Nuget?

En résumé, ce que je veux: 1. exécuter la commande (peut-être update-database) qui créera la base de données à l'aide de mon fichier web.config 2. toutes les migrations seront appliquées à la base de données créée dans leur ordre de création.

Merci. :)

22
sigurd

Je me rends compte que c'est une vieille question, mais que diable ...

Pour permettre aux migrations de créer la base de données initiale, j'ai trouvé que les travaux suivants fonctionnent bien.

  1. Supprimez votre base de données dans SQL Server Object Explorer
  2. Supprimez toutes vos migrations existantes dans le dossier Migrations.
  3. Dans Package-Management-Console, tapez "Add-Migration InitialCreate"

    [facultatif, selon l'initialiseur de votre base de données]

  4. Dans Package-Management-Console, tapez "update-database"

Cela vous donnera un script de migration unique qui vous fera passer de "aucune base de données" à une base de données qui correspond à votre modèle actuel.

43
Dave R

L'utilisation des migrations est très utile, mais j'ai parfois trouvé qu'il était préférable d'utiliser les instructions suivantes lorsque vous travaillez avec des bases de données.

Stratégies d'initialisation de la base de données: utilisez l'une des déclarations commentées qui vous concernent.

public DataContext(): base("DefaultConnection") 
{
  // Database.SetInitializer<DataContext>(new CreateDatabaseIfModelChanges<DataContext>());
  // Database.SetInitializer<DataContext>(new CreateDatabaseIfNotExists<DataContext>());                                                            
  // Database.SetInitializer<DataContext>(new DropCreateDatabaseAlways<DataContext>());
}                                                                                                                                                                                                                                                   
4
njabs