Comment recréer la base de données pour Entity Framework?

je suis dans un mauvais état avec mon ASP.Net projet MVC 5, utilisant le cadre de Code-première entité. Je ne me soucie pas de perdre des données, je veux juste être en mesure de commencer à nouveau, recréer la base de données et commencer à utiliser le Code-première migration.

actuellement je suis dans un état où chaque tentative de mise à jour-Base de données se traduit par une exception étant jeté ou d'obtenir un message d'erreur. Aussi le site ne peut pas accéder à la base de données correctement. Comment puis-je effacer toutes les migrations, recréer base de données et repartir de zéro sans avoir à créer un nouveau projet? En d'autres termes, je veux garder mon code mais supprimer la base de données.

plus tard, je voudrais aussi synchroniser la base de données de déploiement (SQL Server on Azure). Encore une fois, ça ne me dérange pas de laisser tomber toutes les données - je veux juste que ça marche.

Veuillez fournir toute façon les étapes pour revenir à un état propre. Très apprécié.

124
demandé sur Toby Sharp 2013-11-30 22:34:08

7 réponses

suivre les étapes suivantes:

1) allez D'abord à L'Explorateur de serveur dans Visual Studio, vérifiez si le ".mdf" Connexions de Données pour ce projet sont connectés, si oui, clic droit et supprimer.

2 )Allez à L'Explorateur de solutions, cliquez sur l'icône Afficher tous les fichiers.

3) Aller à App_Data, clic droit et supprimer tous ".mdf" fichiers de ce projet.

4) supprimer le dossier Migrations par clic droit et supprimer.

5) allez à SQL Server Management Studio, assurez-vous que la base de données pour ce projet n'est pas là, sinon supprimez-le.

6) Aller à la Console Package Manager Dans Visual Studio et taper:

  1. Enable-Migrations -Force
  2. Add-Migration init
  3. Update-Database

7) lancez votre application

Note: à l'étape 6, Partie 3, Si vous obtenez une erreur "ne peut pas joindre fichier...", c'est probablement parce que vous n'avez pas supprimé complètement les fichiers de base de données dans SQL Server.

188
répondu Lin 2016-01-19 13:59:46

Je voudrais ajouter que la réponse de Lin est correcte.

si vous supprimez incorrectement le MDF, vous devrez le corriger. Pour réparer les connexions vissées dans le projet au MDF. Réponse courte; recréer et supprimer correctement.

  1. créez un nouveau MDF et nommez-le comme l'ancien MDF, mettez-le dans le même emplacement de dossier. Vous pouvez créer un nouveau projet et de créer un nouveau mdf. Le mdf ne doit pas correspondre à vos vieilles tables, parce que ont va le supprimer. Alors créez ou copiez un ancien fichier dans le bon dossier.
  2. l'Ouvrir dans l'explorateur de serveurs [double-cliquez sur le mdf à partir de l'explorateur de solutions]
  3. le Supprimer dans l'explorateur de serveurs
  4. Supprimer à partir de l'explorateur de solutions
  5. exécuter update-database -force [l'Usage de la force si nécessaire]

Fait, de profiter de votre nouvelle bd,

mise à JOUR 11/12/14 - J'utilise ça tout le temps quand je fais un changement de base-ball. J'ai trouvé que c'est une excellente façon de faire reculer vos migrations vers le db original:

  • replace le db à l'original
  • exécuter la migration normale pour la remettre à jour

    1. Update-Database -TargetMigration:0 -force [cela détruira toutes les tables et toutes les données.]
    2. Update-Database -force [employer la force si nécessaire]
42
répondu Steve Coleman 2015-08-11 20:51:06

cela a fonctionné pour moi:

  1. supprimer la base de données de SQL Server Object Explorer Dans Visual Studio. Cliquez-droit et sélectionnez supprimer.
  2. supprimer les fichiers mdf et ldf du système de fichiers - s'ils y sont toujours.
  3. Solution De Reconstruction.
  4. Démarrage de l'Application - de la base de données sera re-créé.
7
répondu Donal 2015-02-11 23:07:51

bien que cette question soit fondée sur le fait que l'on ne se soucie pas des données, la mise à jour des données est parfois essentielle.

si oui, j'ai écrit une liste d'étapes sur la façon de récupérer de L'Entity Framework nightmare quand la base de données a déjà des tables avec le même nom ici: Comment récupérer de L'Entity Framework nightmare-base de données a déjà des tables avec le même nom

apparemment... un modérateur a jugé bon de supprimer mon message ainsi Je vais le coller ici:

comment récupérer de L'Entity Framework nightmare-la base de données a déjà des tables avec le même nom

Description : si vous êtes comme nous lorsque votre équipe est nouvelle à EF, vous finirez dans un état où vous ne pouvez pas créer une nouvelle base de données locale ou vous ne pouvez pas appliquer des mises à jour à votre base de données de production. Vous voulez revenir à un environnement EF propre et puis s'en tenir aux bases, mais vous ne pouvez pas. Si tu l'obtiens en travaillant pour la production, vous ne pouvez pas créer une base de données locale, et si vous la faites fonctionner pour local, votre serveur de production se désynchronise. Et enfin, vous ne voulez pas supprimer de données du serveur de production.

symptôme : ne peut pas exécuter mise à jour-Base de données parce qu'il essaie d'exécuter le script de création et la base de données a déjà des tables avec le même nom.

Erreur

Message: Système.Données.SqlClient.SqlException (0x80131904): là est déjà un objet nommé " dans la base de données.

Problem Background : EF comprend où la base de données actuelle est at comparé à où le code est at basé sur une table dans la base de données appelée dbo.__MigrationHistory. Quand il regarde les Scripts de Migration, il essaie de reconstituer où il était en dernier avec les scripts. S'il le peut, il essaie juste de les appliquer dans ordre. Cela signifie que cela revient au script de création initial et si vous regardez la toute première partie de la commande UP, ce sera le CreeateTable pour la table sur laquelle l'erreur s'est produite.

pour comprendre cela plus en détail, je recommande de regarder les deux vidéos référencées ici: https://msdn.microsoft.com/en-us/library/dn481501 (v=113).aspx

Solution : ce que nous devons faire est de tromper EF en pensant que la base de données actuelle est à jour tout en n'appliquant pas ces commandes Créatetables. Dans le même temps, nous voulons toujours ces commandes existent afin que nous puissions créer de nouvelles bases de données locales.

Étape 1: Production DB clean Tout d'abord, faites une sauvegarde de votre production db. Dans SSMS, cliquez avec le bouton droit de la souris sur la base de données, sélectionnez "Tâches > exporter l'application de niveau de données..."et suivez les invites. Ouvrez votre base de données de production et supprimez dbo.__MigrationHistory table.

Étape 2: environnement Local propre Ouvrez votre dossier migrations et supprimez-le. Je suppose que vous pouvez récupérer tout ça de git si nécessaire.

Étape 3: Recréer L'Initiale Dans le Gestionnaire de paquets, Lancez "Enable-Migrations" (EF vous demandera d'utiliser-ContextTypeName si vous avez plusieurs contextes). Exécutez "Ajout de la Migration Initiale -verbose". Cela va créer l'initiale script pour créer la base de données à partir de zéro basé sur le code courant. Si vous aviez des opérations seed dans la Configuration précédente.cs, alors copie ça de l'autre côté.

Etape 4: Trick EF À ce point, si nous avons couru "Update-Database , nous aurions obtenu l'erreur originale. Donc, nous devons faire croire à EF qu'il est à jour, sans exécuter ces commandes. Donc, allez dans la méthode Up dans L'initiale migration que vous venez de créer et tout commenter.

Étape 5: Mise À Jour-Base De Données Sans code à exécuter sur le processus Up, EF va créer le dbo.__migrationhistory table avec l'entrée correcte pour dire qu'il a exécuté ce script correctement. Aller et de vérifier si vous le souhaitez. Maintenant, déchiffrez ce code et sauvegardez. Vous pouvez lancer Update-Database à nouveau si vous voulez vérifier que EF pense à sa mise à jour. Il ne lancera pas l'Étape Up step avec toutes les commandes CreateTable parce qu'il pense que c'est déjà fait.

Étape 6: confirmer que la CE est effectivement à jour Si vous aviez un code qui n'avait pas encore fait l'objet d'une migration, c'est ce que j'ai fait...

Exécutez "Ajout De La Migration MissingMigrations" Cela créera pratiquement un script vide. Parce que le code était déjà là, il y avait en fait les commandes correctes pour créer ces tables dans le script de migration initiale, donc j'ai juste coupé les commandes CreateTable et équivalent drop dans les méthodes Up et Down.

maintenant, exécutez mise à jour-Base de données encore et regardez-le exécuter votre nouveau script de migration, en créant les tables appropriées dans la base de données.

Étape 7: reconfirmer et commit. Construire, tester, exécuter. Assurez-vous que tout fonctionne, puis propagez les changements.

Étape 8: faites savoir au reste de votre équipe comment procéder. Lorsque la personne suivante se met à jour, EF ne saura pas ce qui l'a frappé étant donné que les scripts qu'il avait lancés auparavant n'existent pas. Mais, en supposant que les bases de données locales puissent être détruites et recréées, tout cela est bon. Ils devront laisser tomber leur base de données locale et Ajouter créer à nouveau à partir de EF. S'ils avaient des changements locaux et des migrations en attente, je leur recommanderais de créer leur DB à nouveau sur master, passer à leur branche de fonctionnalité et recréer ces scripts de migration à partir de zéro.

2
répondu System.Exception 2017-09-07 09:49:41

je veux juste ajouter à l'excellente réponse de @Lin:

5) B. Si vous n'avez pas SQL Management Studio, allez dans"SQL Server Object Explorer". Si vous ne pouvez pas voir votre base de données de projet dans le localdb "SQL Server Object Explorer", puis cliquez sur" Ajouter SQL server " bouton pour l'ajouter à la liste manuellement. Ensuite, vous pouvez supprimer le db de la liste.

1
répondu Dudi 2015-05-25 10:13:32

une solution très simple qui a fonctionné pour moi. Après avoir supprimé toutes les références de base de données et les connexions que vous trouvez dans server/serverobject explorer, faites un clic droit sur le dossier App_Data (n'a montré aucun objet dans l'application pour moi) et sélectionnez Ouvrir. Une fois ouvert, mettez toute la base de données/etc. les fichiers dans un dossier de sauvegarde ou si vous avez le courage de simplement supprimer. Exécutez votre application et il devrait tout recréer à partir de zéro.

0
répondu edencorbin 2014-07-31 18:47:13

ma solution est la mieux adaptée pour :

- supprimé votre fichier mdf

- voulez-vous recréer votre base de données.

pour recréer votre base de données vous devez ajouter la connexion en utilisant Visual Studio.

Étape 1 : aller à L'Explorateur de serveur ajouter une nouvelle connexion( ou chercher une icône Ajouter db).



l'Étape 2 : Modifier Datasource à Microsoft SQL Server Base de données de Fichier .



Étape 3 : ajoutez n'importe quel nom de base de données que vous désirez dans le champ nom de fichier de base de données .(de préférence le même nom que vous avez dans le web.config AttachDbFilename attribut)



Étape 4 : cliquez sur Parcourir et naviguez jusqu'à l'endroit où vous voulez qu'il soit situé.



Étape 5 : dans le gestionnaire de paquets, exécuter la commande update-database

0
répondu Mbuso Mkhize 2017-10-02 11:52:16