2013-07-29 9 views
20

Pracuję nad projektem korzystającym z MVC4 w Visual Studio 2012 i dodałem kolumnę w tabeli.Jak włączyć migrację, aby zaktualizować moją bazę danych w MVC4?

Teraz, gdy chcę debugować mój projekt, błąd mówi, aby użyć migracji do aktualizacji mojej bazy danych.

Co muszę zrobić?

I zostały poszukiwania dużo i znalazłem kilka metod, takich jak:

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

ale nie wiem gdzie i jak zaimplementować to ... Próbowałem w app_start, global.asax etc ...

Co znalazłem, aby włączyć migracje bezpośrednio w konsoli z nugetu.

Ale nie mogę wykonać tej pracy.

Komendy używam:

Enable-Migrations -EnableAutomaticMigrations 

==> consolse mówi, że więcej niż jeden kontekst został znaleziony. Aby włączyć używanie, Enable-Migrations -ContextTypeName NameOfTheNamespace.Models.DefaultConnection

Ale nie wiem, co to jest -ContextTypeName, wiele próbowałem, ale nie mogłem zrozumieć.

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

} 

Odpowiedz

26

Błąd mówi, że masz dwa konteksty. Kiedy po raz pierwszy tworzysz projekt przy użyciu MVC 4, Visual Studio domyślnie tworzy kontekst dla twojego SimpleMembership (sprawdź Models/Account.cs) lub wykonaj ctrl+f dla UsersContext, możesz po prostu usunąć ten plik, jeśli nie używasz SimpleMembership. Po usunięciu tego kontekstu, należy iść dalej i dodać następujące klasy DefaultConnection:

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

Jeśli włączona migracje prawidłowo należy również mieć folder o nazwie Migrations i wewnątrz niego klasa Configuration, jego konstruktor powinien wyglądać tak (jeśli chcesz włączyć automatyczne migracje):

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

FWIW, musiałem dodać " base.OnModelCreating (konstruktor); " do końca nadpisywania OnModelCreating w celu umożliwienia automatycznej migracji do pracy na moim serwerze produkcyjnym (przy użyciu EF 6). –

1

Jeśli masz małe zmiany, nie potrzebujesz migracji. Możesz dodać kolumnę do dowolnej tabeli w bazie danych za pomocą skryptu sql i dodać właściwość do modelu i usunąć tabelę metadanych. (najpierw wykonaj kopię zapasową bazy danych bez wątpienia).

lub użyć Migracje takie jak ten: aspnet-mvc-4-entity-framework-scaffolding-and-migrations

2

to spróbuj wpisać w konsoli:

Enable-Migrations -ContextTypeName Vista.Models.DefaultConnection 

Vista.Models.DefaultConnection twój kontekst (klasa, która dziedziczy z DbContext).

19

polecenia:

  1. enable-migrations default context
  2. add-migration InitialCreate (do generowania migawkę)
  3. add-migration InitialCreate (zastosować migawkę)
  4. update-database
  5. update-database -verbose

Szczegółowe explination będzie tutaj: http://www.dotnet-tricks.com/Tutorial/entityframework/R54K181213-Understanding-Entity-Framework-Code-First-Migrations.html

+2

Proszę o wyjaśnienie, dlaczego te polecenia odpowiadają na pytanie? Odpowiedzi tylko na kod są zniechęcane (http://meta.stackexchange.com/q/148272/274165), ponieważ nie uczą rozwiązania. (Ten post został oznaczony przez co najmniej jednego użytkownika, prawdopodobnie dlatego, że uważał, że odpowiedź bez wyjaśnienia powinna zostać usunięta.) –

+0

Specjalne podziękowania dla Szczegółowy opis LINK –

+0

aktualizacja bazy danych -script do generowania sql –