2013-07-29 9 views
20

Sto lavorando a un progetto utilizzando MVC4 in Visual Studio 2012 e ho aggiunto una colonna nella tabella.Come abilitare la migrazione per aggiornare il mio database in MVC4?

Ora quando voglio eseguire il debug del mio progetto, l'errore dice di usare la migrazione per aggiornare il mio database.

Cosa devo fare?

Ho cercato un sacco e hanno trovato alcuni metodi come:

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

ma non sanno come e dove implementare questo ... hanno provato a app_start, global.asax ecc ...

Quello che ho trovato è stato, per abilitare le migrazioni direttamente nella console dal nuget.

Ma non posso farlo funzionare.

comandi che uso:

Enable-Migrations -EnableAutomaticMigrations 

==> consolse dice che è stato trovato più di un contesto. Per abilitare l'uso, Enable-Migrations -ContextTypeName NameOfTheNamespace.Models.DefaultConnection

Ma non so quale sia lo -ContextTypeName, ho provato molto ma non ho potuto capire.

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; } 
    } 

} 

risposta

26

L'errore sta dicendo che hai due contesti. Quando crei un progetto per la prima volta utilizzando MVC 4, Visual Studio crea un contesto per il tuo SimpleMembership per impostazione predefinita (seleziona Modelli/Account.cs) oppure effettua un ctrl+f per UsersContext, puoi semplicemente eliminare questo file se non stai utilizzando SimpleMembership. Dopo aver rimosso questo contesto, andare avanti e aggiungere il seguente al vostro DefaultConnection classe:

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

Se è stata attivata correttamente migrazioni si dovrebbe anche avere una cartella chiamata Migrations e al suo interno di una classe Configuration, il suo costruttore dovrebbe assomigliare a questo (se si desidera abilitare le migrazioni automatiche):

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

FWIW, avevo bisogno di aggiungere " base.OnModelCreating (costruttore);" alla fine del tuo OnModelCreating override per far funzionare le migrazioni automatiche sul mio server di produzione (usando EF 6). –

1

Se si dispone di piccole modifiche, non è necessario eseguire la migrazione. È possibile aggiungere una colonna a qualsiasi tabella sul database con lo script sql e aggiungere la proprietà per modellare ed eliminare la tabella dei metadati. (backup di database in primo luogo senza dubbio).

oppure è possibile utilizzare Migrazioni come questo: aspnet-mvc-4-entity-framework-scaffolding-and-migrations

2

Provate a digitare questo nella console:

Enable-Migrations -ContextTypeName Vista.Models.DefaultConnection 

Vista.Models.DefaultConnection è vostro contesto (la classe che eredita da DbContext).

19

Comandi:

  1. enable-migrations default context
  2. add-migration InitialCreate (per la generazione di snapshot)
  3. add-migration InitialCreate (per applicare snapshot)
  4. update-database
  5. update-database -verbose

explination dettagliata sarà qui: http://www.dotnet-tricks.com/Tutorial/entityframework/R54K181213-Understanding-Entity-Framework-Code-First-Migrations.html

+2

Potresti per favore [modificare] in una spiegazione del perché questi comandi rispondono alla domanda? Le risposte al solo codice sono [scoraggiate] (http://meta.stackexchange.com/q/148272/274165), perché non insegnano la soluzione. (Questo post è stato contrassegnato da almeno un utente, presumibilmente perché pensava che una risposta senza spiegazione dovesse essere eliminata.) –

+0

Un ringraziamento speciale per Descrizione dettagliata LINK –

+0

update-database-script per generare lo sql –