Hoe een database voor Entity Framework opnieuw te maken?

Ik ben in een slechte staat beland met mijn ASP.Net MVC 5-project, met behulp van Code-First Entity Framework. Ik geef er niet om dat ik gegevens kwijtraak, ik wil gewoon opnieuw kunnen beginnen, de database opnieuw kunnen maken en Code-First-migraties kunnen gaan gebruiken.

Momenteel verkeer ik in een staat waarin elke poging om de database bij te werken resulteert in een uitzondering of een foutmelding. Ook kan de website de database niet goed benaderen. Hoe kan ik alle migraties wissen, de database opnieuw maken en helemaal opnieuw beginnen zonder een nieuw project te hoeven maken? Met andere woorden, ik wil mijn code behouden maar de database laten vallen.

Later wil ik ook de implementatiedatabase (SQL Server op Azure) gesynchroniseerd krijgen. Nogmaals, ik vind het niet erg om alle gegevens te laten vallen – ik wil gewoon dat het werkt.

Geef a.u.b. eventuele stappen om terug te keren naar een schone staat. Zeer gewaardeerd.


Antwoord 1, autoriteit 100%

Volg onderstaande stappen:

1) Ga eerst naar Server Explorer in Visual Studio, controleer of de “.mdf”-gegevensverbindingen voor dit project zijn aangesloten, zo ja, klik met de rechtermuisknop en verwijder.

2 )Ga naar Solution Explorer, klik op het pictogram Alle bestanden weergeven.

3) Ga naar App_Data, klik met de rechtermuisknop en verwijder alle “.mdf”-bestanden voor dit project.

4) Verwijder de map Migraties door met de rechtermuisknop te klikken en te verwijderen.

5) Ga naar SQL Server Management Studio, zorg ervoor dat de DB voor dit project er niet is, verwijder het anders.

6) Ga naar de Package Manager Console in Visual Studio en typ:

  1. Enable-Migrations -Force
  2. Add-Migration init
  3. update-database

7) Start uw applicatie

Opmerking: als u in stap 6, deel 3, de foutmelding “Kan het bestand niet bijvoegen…” krijgt, is dit mogelijk omdat u de databasebestanden niet volledig in SQL Server hebt verwijderd.


Antwoord 2, autoriteit 22%

Ik wil hieraan toevoegen dat het antwoord van Lin correct is.

Als u de MDF onjuist verwijdert, moet u deze repareren. Om de geschroefde verbindingen in het project vast te zetten op de MDF. Kort antwoord; maak het opnieuw en verwijder het op de juiste manier.

  1. Maak een nieuwe MDF en noem deze dezelfde als de oude MDF, plaats deze in dezelfde maplocatie. U kunt een nieuw project aanmaken en een nieuwe mdf aanmaken. De mdf hoeft niet overeen te komen met uw oude tabellen, omdat we deze gingen verwijderen. Dus maak of kopieer een oude naar de juiste map.
  2. Open het in serververkenner [dubbelklik op de mdf van oplossingsverkenner]
  3. Verwijder het in serververkenner
  4. Verwijder het uit de oplossingsverkenner
  5. voer Update-Database -forceuit [Gebruik force indien nodig]

Klaar, veel plezier met je nieuwe database

UPDATE14/12/14 – Ik gebruik dit altijd wanneer ik een belangrijke db-wijziging aanbreng.
Ik ontdekte dat dit een geweldige manier is om je migraties terug te draaien naar de oorspronkelijke database:

  • Zet de db terug naar origineel
  • Voer de normale migratie uit om het weer actueel te maken

    1. Update-Database -TargetMigration:0 -force[Hiermee worden alle tabellen en alle gegevens vernietigd.]
    2. Update-Database -force[gebruik geweld indien nodig]

Antwoord 3, autoriteit 4%

Dit werkte voor mij:

  1. Verwijder database uit SQL Server Object Explorer in Visual Studio.
    Klik met de rechtermuisknop en selecteer verwijderen.
  2. Verwijder mdf- en ldf-bestanden uit het bestandssysteem – als ze er nog zijn.
  3. Oplossing opnieuw opbouwen.
  4. Toepassing starten – database wordt opnieuw gemaakt.

Antwoord 4, autoriteit 2%

Hoewel deze vraag wordt gesteld door niet om de gegevens te geven, is onderhoud van de gegevens soms essentieel.

Als dat zo is, heb ik een lijst met stappen geschreven om te herstellen van de nachtmerrie van Entity Framework wanneer de database hier al tabellen met dezelfde naam heeft: Herstellen van Entity Framework-nachtmerrie – database heeft al tabellen met dezelfde naam

Blijkbaar… een moderator vond het gepast om mijn bericht te verwijderen, dus ik plak het hier:

Hoe te herstellen van Entity Framework-nachtmerrie – database heeft al tabellen met dezelfde naam

Beschrijving: als je net als wij bent wanneer je team nieuw is bij EF, kom je terecht in een staat waarin je ofwel geen nieuwe lokale database kunt maken of niet kunt updates toepassen op uw productiedatabase. Je wilt terug naar een schone EF-omgeving en dan bij de basis blijven, maar dat kan niet. Als je het voor productie werkend krijgt, kun je geen lokale db maken, en als je het voor lokaal werkend krijgt, loopt je productieserver niet synchroon. En tot slot, u wilt geen productieservergegevens verwijderen.

Symptoom: kan Update-Databaseniet uitvoeren omdat het het aanmaakscript probeert uit te voeren en de database al tabellen heeft met hetzelfde naam.

Foutmelding: System.Data.SqlClient.SqlException (0x80131904): daar
is al een object met de naam ” in de database.

Achtergrond van het probleem: EF begrijpt waar de huidige database zich bevindt in vergelijking met waar de code zich bevindt op basis van een tabel in de database met de naam dbo.__MigrationHistory. Wanneer het naar de migratiescripts kijkt, probeert het met de scripts te verzoenen waar het het laatst was. Als het niet kan, probeert het ze gewoon in volgorde toe te passen. Dit betekent dat het teruggaat naar het oorspronkelijke aanmaakscript en als je naar het allereerste deel in het UP-commando kijkt, is het de CreeateTable voor de tabel waarin de fout zich voordeed.

Om dit beter te begrijpen, raad ik je aan beide video’s te bekijken waarnaar hier wordt verwezen:
https://msdn.microsoft.com/en -us/library/dn481501(v=vs.113).aspx

Oplossing: wat we moeten doen is EF laten denken dat de huidige database up-to-date is, terwijl we deze CreateTable-commando’s niet toepassen. Tegelijkertijd willen we dat die commando’s nog steeds bestaan, zodat we nieuwe lokale databases kunnen maken.

Stap 1: Productie-DB opschonen
Maak eerst een back-up van uw productie-db. Klik in SSMS met de rechtermuisknop op de database, selecteer “Taken > Data-tier-toepassing exporteren…” en volg de aanwijzingen.
Open uw productiedatabase en verwijder/verwijder de tabel dbo.__MigrationHistory.

Stap 2: Lokale omgeving schoon
Open uw migratiemap en verwijder deze. Ik neem aan dat je dit allemaal terug kunt krijgen van git indien nodig.

Stap 3: maak de initiaal opnieuw
Voer in Pakketbeheer “Enable-Migrations” uit (EF zal u vragen om -ContextTypeName te gebruiken als u meerdere contexten hebt).
Voer “Add-Migration Initial -verbose” uit. Hiermee wordt het eerste script gemaakt om de database helemaal opnieuw te maken op basis van de huidige code.
Als je seed-bewerkingen had in de vorige Configuration.cs, kopieer die dan.

Stap 4: Truc EF
Als we op dit moment Update-Databasezouden uitvoeren, zouden we de oorspronkelijke fout krijgen. We moeten EF dus laten denken dat het up-to-date is, zonder deze commando’s uit te voeren. Ga dus naar de Omhoog-methode in de eerste migratie die u zojuist hebt gemaakt en becommentarieer alles.

Stap 5: database bijwerken
Zonder code om uit te voeren op het Up-proces, zal EF de dbo.__MigrationHistory-tabel maken met de juiste invoer om te zeggen dat het dit script correct heeft uitgevoerd. Ga eens kijken als je wilt.
Maak nu het commentaar van die code ongedaan en sla op.
Je kunt Update-Databaseopnieuw uitvoeren als je wilt controleren of EF denkt dat het up-to-date is. Het zal de stap Omhoog niet uitvoeren met alle CreateTable-commando’s omdat het denkt dat het dit al heeft gedaan.

Stap 6: Bevestig dat EF ECHT up-to-date is
Als je code had waarop nog geen migraties waren toegepast, dan is dit wat ik deed…

Voer ‘Migratie toevoegen ontbrekende migraties’ uit
Dit zal praktisch een leeg script creëren. Omdat de code er al was, waren er eigenlijk de juiste commando’s om deze tabellen te maken in het initiële migratiescript, dus ik heb de CreateTable en equivalente drop-commando’s in de Up en Down-methoden geknipt.

Voer nu Update-Databaseopnieuw uit en kijk hoe het uw nieuwe migratiescript uitvoert en de juiste tabellen in de database maakt.

Stap 7: herbevestigen en vastleggen.
Bouwen, testen, rennen. Zorg ervoor dat alles draait en bevestig de wijzigingen.

Stap 8: Laat de rest van uw team weten hoe verder te gaan.
Wanneer de volgende persoon update, zal EF niet weten wat het heeft geraakt, aangezien de scripts die het eerder had uitgevoerd niet bestaan. Maar in de veronderstelling dat lokale databases kunnen worden weggeblazen en opnieuw gemaakt, is dit allemaal goed. Ze moeten hun lokale database verwijderen en opnieuw toevoegen vanuit EF. Als ze lokale wijzigingen en lopende migraties hadden, raad ik aan dat ze hun DB opnieuw op master maken, naar hun feature-branch overschakelen en die migratiescripts helemaal opnieuw maken.


Antwoord 5

Ik wil gewoon iets toevoegen aan het uitstekende antwoord van @Lin:

5) B.
Als u geen SQL Management Studio hebt, gaat u naar “SQL Server Object Explorer”.
Als u uw project-db niet kunt zien in de localdb “SQL Server Object Explorer”, klik dan op de knop “SQL-server toevoegen” om het handmatig aan de lijst toe te voegen. Daarna kunt u de db uit de lijst verwijderen.


Antwoord 6

Een mogelijke, zeer eenvoudige oplossing die voor mij werkte. Na het verwijderen van alle databaseverwijzingen en verbindingen die u vindt in de server/serverobject-verkenner, klikt u met de rechtermuisknop op de map App_Data (heeft voor mij geen objecten in de toepassing weergegeven) en selecteert u openen. Eenmaal geopend, plaats alle database/etc. bestanden in een back-upmap of als je het lef hebt, verwijder ze gewoon. Voer je applicatie uit en het zou alles opnieuw moeten maken.


Antwoord 7

Mijn oplossing is het meest geschikt voor:
– uw mdf-bestand verwijderd
– uw db opnieuw wilt maken.

Om uw database opnieuw te makenmoet u de verbinding toevoegen met Visual Studio.

Stap 1: Ga naar Server Explorer nieuwe verbinding toevoegen (of zoek naar een pictogram voor het toevoegen van db).

Stap 2: verander Datasourcein Microsoft SQL Server-databasebestand.

Stap 3: voeg een databasenaam toe die u wenst in het veld Databasebestandsnaam(bij voorkeur dezelfde naam die u hebt in de web.config AttachDbFilenamekenmerk)

Stap 4: klik op Bladeren en navigeer naar de plaats waar u het wilt hebben.

Stap 5: voer in de console van de pakketbeheerder de opdracht update-database

uit

Other episodes