11

Diese Frage auf so viele Male in verschiedenen Geschmacksrichtungen gefragt wurde. Ich habe alle Antworten durchgegangen und viel Zeit verbrennen lassen. Ich kann einfach nicht funktionieren.-Code Erste Migration - Entity Framework - nicht in der Lage Spalte der Tabelle hinzuzufügen

Ich habe auf asp.net mvc Entity Framework, SQL-Server-App gearbeitet. Ich habe bereits eine Datenbank, Tabellen usw. und alles funktioniert. Ich muss nur eine neue Spalte zur Tabelle hinzufügen.

Also .. Ich habe eine Eigenschaft in der Modellklasse, so dass ich die Spalte der Tabelle hinzufügen könnte. Aber ohne Erfolg.

So kann ich die Schritte in der folgenden Reihenfolge.

  1. Fügen Sie das Feld in meiner Modellklasse hinzu.

    [Required] 
    public string EmailSubject{ get; set; } 
    
  2. dann den Ordner Migrationen in meinem asp.net MVC-Projekt enthält Configuration.cs Klasse erfolgreich
  3. dann in Package Manager-Konsole Ausgabe folgende ich Befehl, den ich löschen.

    Enable-Migrations -ContextTypeName AppointmentReminder.Data.ReminderDb -Force 
    
  4. Dann habe ich die Eigenschaft wahr als

    public Configuration() 
    { 
        AutomaticMigrationsEnabled = true; 
    } 
    
  5. Dann folgt ausgeben ich den folgenden Befehl in Paket-Manager-Konsole.

    Update-Database -Verbose -Force 
    

Hier ist, was meine Verbindungszeichenfolge Verbindung zur Datenbank auf Standard sieht aus wie

Data Source=(LocalDb)\v11.0;AttachDbFilename=C:\practice\AppointmentReminder4\AppointmentReminder4\App_Data\aspnet-AppointmentReminder4-20141202060615.mdf;Initial Catalog=aspnet-AppointmentReminder4-20141202060615;Integrated Security=True 

aber vermag ich nicht die neue Spalte in meiner gewünschten Tabelle hinzuzufügen.


Edit 1

ich das Modell aktualisiert, wie ohne die erforderliche Attribut folgt und alle oben genannten Schritte durchgeführt, aber ich war immer noch nicht fähig, die Spalte der Tabelle hinzuzufügen.

Hier sind alle Befehle und ihre Ausgabe.

PM> Enable-Migrations -ContextTypeName AppointmentReminder.Data.ReminderDb -Force 
Checking if the context targets an existing database... 
Code First Migrations enabled for project AppointmentReminder4. 
PM> Update-Database -Verbose -Force 
Using StartUp project 'AppointmentReminder4'. 
Using NuGet project 'AppointmentReminder4'. 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
Target database is: 'aspnet-AppointmentReminder4-20141202060615' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration). 
No pending explicit migrations. 
Running Seed method. 
PM> Update-Database -Verbose -Force 
Using StartUp project 'AppointmentReminder4'. 
Using NuGet project 'AppointmentReminder4'. 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
Target database is: 'aspnet-AppointmentReminder4-20141202060615' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration). 
No pending explicit migrations. 
Running Seed method. 
PM> 

Edit 2 Schließlich dieses Problem behoben. Alle meine obigen Schritte waren korrekt. Außer dass ich meine Modellklasse bearbeitet habe, im Gegensatz zu der tatsächlichen Datenklasse, die tatsächlich an das ReminderDb (EF-Objekt) gebunden ist. Nachdem ich die korrekte Klasse mit der Eigenschaft aktualisiert hatte, funktionierte alles erfolgreich. Danke an alle die mit Hilfe geantwortet haben!

+0

Obwohl ich bereits beantwortet habe, was ich denke, die Antwort ist, dann sollten Sie zeigen, was Sie Fehler bekam. –

Antwort

11

Da das Feld erforderlich ist, müssen Sie einen Standardwert angeben. Bearbeiten Sie Ihre Migrationsdatei, finden Sie die Zeile hinzufügen Ihre Spalte, und angeben, was der Standardwert sein sollte:

public override void Up() 
{  
    AddColumn("dbo.MyTable", "EmailSubject", c => c.String(nullable: false, defaultValue: "")); 
} 

Zum Vergleich: Default value for Required fields in Entity Framework migrations?

Edit: Basierend auf Ihrer bearbeiten, müssen Sie erstellen eine Migration, bevor Sie versuchen, zu aktualisieren. Sehen Sie this example für wie Sie es normalerweise verwenden.

jedoch, wenn Sie versuchen-Code Erste Migrationen auf eine vorhandene Datenbank zu übernehmen, kann dieser Artikel helfen: Code First Migrations with an existing database

+0

noch keine Aktualisierung nach dem Entfernen des erforderlichen Attributs –

+0

@ dotnet-Praktiker Sie ' "add-migration" wird nirgends ausgeführt, so dass es keine Anwendung zulässt. Siehe mein Update oben. –

5

Sie haben die neue Spalte mit dem erforderlichen Attribut versehen. Wenn diese Tabelle bereits einige Zeilen enthält, können diese Zeilen diese Spalte nicht enthalten. Entfernen erforderlich. Migrieren Sie dann alle Zeilen mit Daten. Eigenschaft erforderlich machen und erneut migrieren.

+2

Dies ist wahrscheinlich die richtige Antwort. Sie müssen das erforderliche Attribut verlassen, migrieren, den Wert für vorhandene Spalten festlegen, das erforderliche Attribut hinzufügen, erneut migrieren – pquest

+0

noch keine Aktualisierung nach dem Entfernen des erforderlichen Attributs –

Verwandte Themen