Entity framework code first – hoe Update-Database voor productiedatabase uit te voeren

Ik wil weten hoe ik de opdracht ‘Update-Database’ voor een productiedatabase moet uitvoeren.

De ‘Update-Database’-database werkt prima vanaf mijn lokale computer, maar hoe krijg ik dit werkend voor productiegegevens?

Dus, als ik een wijziging aanbreng in mijn applicatie en vervolgens de ‘publish’ via Visual Studio uitvoer, werkt dit prima voor de codekant van de dingen, maar hoe voer ik de ‘Update-Database’-opdracht uit voor de productiegegevens.

Ik hoop dat deze vraag zinvol is…

Bedankt,


Antwoord 1, autoriteit 100%

Zie Entity Framework-migraties (code eerst) gebruiken in productiezodat uw toepassing de database automatisch bijwerkt wanneer het Entity Framework wordt geïnitialiseerd.

Als u zich nu meer op uw gemak voelt met handmatige controle over de migratie, kunt u het argument -Script voor de opdracht Update-Database op uw ontwikkelmachine gebruiken om SQL-scripts te genereren die u vervolgens op de productiedatabase kunt uitvoeren.

p>

http://msdn.microsoft.com/en-us/data/ jj591621.aspx(zie het gedeelte Een SQL-script verkrijgen)


Antwoord 2, autoriteit 72%

Om toe te voegen aan wat @David al zei…

Persoonlijk vertrouw ik automatic updatesniet in ‘live’ scenario’s, en ik geef altijd de voorkeur aan handmatig databasebeheer (dwz er is een probleem met permissionsdie nodig zijn om of verander Db – om nog maar te zwijgen van shared hosting enz.) – maar van wat ik heb gezien, zijn migraties behoorlijk solide als het gaat om synchronisatie (in feite is de enige manier om ze normaal te ‘ontkoppelen’ door de Db te verwijderen en volledig te forceren /nieuwe update).

Hier is een bericht dat ik een tijdje geleden heb gemaakt over het scripten synchronize database / codeen gericht op implementatiescenario’s (en wanneer zich problemen voordoen). Het geldt (nog) niet voor jou maar wel iets om rekening mee te houden.

MVC3 en Code First Migrations – “model dat de ‘blah’-context ondersteunt gewijzigd sinds de database is gemaakt”


Antwoord 3, autoriteit 19%

Wilt u de database automatischbijwerken naar de nieuwste versie, waar en wanneer uw applicatie ook wordt uitgevoerd (ontwikkeling en productie)?

Dit is misschien geen goed idee, behalve in zeer eenvoudige scenario’s waarin u weet dat u automatische migratie kunt vertrouwen en het handmatig migreren van de database(s) niet haalbaar is. Zie dit antwoord: https://stackoverflow.com/a/15718190/2279059. Als je deze waarschuwing negeert, lees dan verder.

Voeg het volgende toe aan web.config:

<entityFramework>
<contexts>
  <context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" />
  </context>
</contexts>

Dit ziet er misschien eng uit, maar het doet in principe hetzelfde als de volgende code:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>());

Als je geen geluk hebt met web.config, dan kun je ook proberen deze code in Global.asaxte zetten. Persoonlijk geef ik de voorkeur aan configuratie boven code.

Als u wilt dat uw configuratiebestand er schoner uitziet, kunt u ook een nieuwe klasse afleiden uit de sjabloon MigrateDatabaseToLatestVersion-klasse, zodat u de cryptische syntaxis niet hoeft te gebruiken voor het doorgeven van typeargumenten in uw web.cofigbestand:

public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {}

Wat dit doet is om een ​​database-initializer in te stellen die de database automatisch bijwerkt naar de nieuwste versie.

(Bron en meer details: Entity Framework-code Eerste web.config initialisatie )


Antwoord 4

Een andere oplossing die voor mij heeft gewerkt, was dit:
In mijn lokale web.config-bestand, stel ik de verbindingsreeks in om naar de productieserver te wijzen.

Dan worden alle PM-console-opdrachten uitgevoerd op de productieserver. Ik kan update-databaseUpdate-database wijzigen als nodig, en de wijzigingen zijn van toepassing op de productiedatabase.


Antwoord 5

U kunt de –update-database EF-gereedschapsopdracht uitvoeren met behulp van de productieverbindingsreeks als volgt:

Update-Database -Args '--environment Production'

Bron: https: // docs .microsoft.com / NL-VS / EF / CORE / CLI / POWERSHELL # ASPNET-CORE-MILIEUUR

Zoals vermeld door anderen, moet je extra voorzichtig zijn, je moet het zeker eerst proberen op een enscenering omgeving.

Other episodes