0

Ich verwende Entity Framework und Codefirst, um eine gespeicherte Prozedur zu erstellen. Während ich reed, sollten wir einige Schritte im Paket-Manager tun, um SP zu erstellen.Update-Datenbank funktioniert nicht in Code zuerst

1 - ermöglichen Migration

2- Add-Migration myClass

3- update-Datenbank

und in Myclass(new created) ich meinen SP-Code in UP() -Methode schreiben SP zu erstellen. funktioniert gut!! ABER wenn ich SP ändere und update-database erneut ausführe funktioniert es nicht und ich muss einen weiteren add-migration Befehl ausführen um MYclass2 zu erstellen. Ist das richtig? Ich meine jedes Mal, wenn ich Add-Migration schreiben sollte?

diese mycode ist

public override void Up() 
     { 
      Sql(@"Create procedure testSp 
         as 
select std.Id as stdName, std.Name as MajorName, mj.Name from dbo.Students as std 
inner join dbo.Majors as mj on std.Id = mj.Id 
"); 
     } 

     public override void Down() 
     { 
      Sql("drop procedure testSp"); 
     } 

wenn ich update-Datenbank laufen wieder das Ergebnis "No pending explicit migration"

auch wenn ich die SQL-Abfrage zu ändern "Prozedur Alter ...." es nicht funktioniert, keine Änderung passiert. dank

EDITED

dieses Szenario betrachten, möchte ich meine SP-Namen ändern (nur ein Beispiel) so muss ich die Abfrage ändern, um "Speicher Prozedur tespSP2 Alter ..." oder irgendeine andere Änderung, sollte ich add-migration wieder ausführen? oder Update-Datenbank soll es tun ??

+0

Verschiedene Techniken diskutiert [hier] (https://stackoverflow.com/questions/7667630/can-you-create-sql-views-stored-procedure-using-entity-framework-4-1-code- Tannen). –

Antwort

1

in Entity Framework-Migrationen zu einer _migrationHistory Tabelle können Sie die letzte Zeile dieser Tabelle löschen [es wird nicht empfohlen]

oder Sie können Rollback verwenden/Undo Befehl

Update-Database -TargetMigration:MigrationsName

dann Verwenden Sie update-database -force

+0

Was passiert nach diesem Code? Überlege, ob ich meine storePr-Abfrage ändern möchte. Was soll ich Schritt für Schritt tun? –

+0

Sie können eine weitere Migration hinzufügen und ändern Sie Ihren Code dort, es ist der beste Weg oder wenn Sie nicht in Produktion sind Sie können es manuell tun, zuerst entfernen Sie die letzte Zeile der Tabelle _migrationHistory und dann den Befehl update-database, wird es Aktualisieren Sie Ihre Datenbank mit der letzten Migration – Saeed

+0

, aber wenn wir Code zuerst verwenden, soll es nicht auf den SQl-Server und seine Tabellen zugreifen. Ich dachte Update-Datenbank sollte es automatisch tun !!! Es gibt also keine REwirte über Migration, hab ich recht ?? Jedes Mal sollten wir eine neue Migration erstellen. –