2013-07-29 1 views
20

Ich arbeite an einem Projekt mit MVC4 in Visual Studio 2012 und habe eine Spalte in der Tabelle hinzugefügt.Wie kann ich die Migration aktivieren, um meine Datenbank in MVC4 zu aktualisieren?

Jetzt, wenn ich mein Projekt debuggen will, sagt der Fehler, die Migration zu verwenden, um meine Datenbank zu aktualisieren.

Was muss ich tun?

Ich habe einige Methoden viel gesucht und gefunden wie:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    Database.SetInitializer<ResTabelaIndex>(null); 
} 

, aber nicht wissen, wie und wo zu implementieren diese ... Haben Sie versucht in app_start, global.asax etc ...

Was ich fand, war, die Migrationen direkt in der Konsole aus dem nugget zu ermöglichen.

Aber ich kann das nicht funktionieren.

Befehle Ich benutze:

Enable-Migrations -EnableAutomaticMigrations 

==> consolse sagt, dass mehr als ein Zusammenhang gefunden wurde. Um zu verwenden, Enable-Migrations -ContextTypeName NameOfTheNamespace.Models.DefaultConnection

Aber ich weiß nicht, was ist das -ContextTypeName, habe viel versucht, aber konnte nicht verstehen.

My Model Code: 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 
using System.Data.Entity.Migrations; 
using System.ComponentModel.DataAnnotations; 
using System.Data.Entity.Infrastructure; 

namespace Vista.Models 
{ 
    public class TabelaIndex 
    { 
     public int ID { get; set; } 
     public string n_empresa { get; set; } 
     public string titulo{ get; set; } 
     public string url { get; set; } 
     public string imagens { get; set; } 
    } 

    public class DefaultConnection : DbContext 
    { 
     public DbSet<TabelaIndex> ResTabelaIndex { get; set; } 
    } 

} 

Antwort

26

Der Fehler besagt, dass Sie zwei Kontexte haben. Wenn Sie ein Projekt zum ersten Mal mit MVC 4 erstellen, erstellt Visual Studio standardmäßig einen Kontext für Ihre SimpleMembership (überprüfen Sie Models/Account.cs) oder führen Sie eine ctrl+f für UsersContext, Sie können diese Datei löschen, wenn Sie nicht SimpleMembership verwenden. Nach diesem Kontext zu entfernen, gehen Sie voran und fügen Sie folgendes zu Ihrer DefaultConnection Klasse:

protected override void OnModelCreating(DbModelBuilder builder) 
{ 
    Database.SetInitializer(new MigrateDatabaseToLatestVersion<DefaultConnection,Configuration>()); 
} 

Wenn Sie Migrationen aktivierten korrekt sollen Sie auch einen Ordner Migrations genannt haben und in ihm eine Configuration Klasse, der Konstruktor soll wie folgt aussehen (wenn Sie wollen automatische Migrationen ermöglichen):

public Configuration() 
{ 
    AutomaticMigrationsEnabled = true; 
} 
+0

FWIW, ich brauchte "hinzufügen base.OnModelCreating (Builder);“ bis zum Ende Ihres OnModelCreating überschreibt, um die automatischen Migrationen zu bekommen auf meinem Produktions-Server zu arbeiten (mit EF 6). –

1

Wenn Sie kleine Änderungen haben, brauchen Migration nicht. Sie können einer Tabelle in der Datenbank mit sql-Skript eine Spalte hinzufügen und eine Eigenschaft hinzufügen, um die Metadatentabelle zu modellieren und zu löschen. (Datenbank zuerst ohne Zweifel). Migrations wie diese

Oder Sie verwenden: aspnet-mvc-4-entity-framework-scaffolding-and-migrations

2

Versuchen Sie, diese in die Konsole eingeben:

Enable-Migrations -ContextTypeName Vista.Models.DefaultConnection 

Vista.Models.DefaultConnection ist Ihr Kontext (die Klasse, die von DbContext erbt).

19

Befehle:

  1. enable-migrations default context
  2. add-migration InitialCreate (zur Erzeugung von Snapshot)
  3. add-migration InitialCreate (anzuwenden Snapshot)
  4. update-database
  5. update-database -verbose

Detaillierte explination hier: http://www.dotnet-tricks.com/Tutorial/entityframework/R54K181213-Understanding-Entity-Framework-Code-First-Migrations.html

+2

Könnten Sie bitte [Bearbeiten] in einer Erklärung, warum diese Befehle die Frage beantworten? Code-only-Antworten werden [entmutigt] (http://meta.stackexchange.com/q/148272/274165), weil sie die Lösung nicht lehren. (Dieser Beitrag wurde von mindestens einem Benutzer markiert, vermutlich, weil sie dachten, eine Antwort ohne Angabe von Gründen zu streichen.) –

+0

Besonderen Dank für Ausführliche Beschreibung LINK –

+0

Update-Datenbank -script die SQL zu generieren –